2017-11-06 2 views
-3

Ich versuche, ein Spiel von Wörterbuch Stein Papier Schere zu machen, und ich würde eine Menge von if und elif verwenden, aber mein CS Lab Tech sagte mir, ich könnte ein Wörterbuch in Python verwenden. Wie würde ich es benutzen, um eine Schere aus Steinpapier zu machen?Wie benutze ich Wörterbücher?

Mein Plan ist, eine Funktion zu verwenden und einen Buchstaben aus einer Liste zu ziehen und zu vergleichen, ob es ein Gewinn ist, sagt das Spiel "gewinnen", wenn Verlust sagt "Verlust" und wenn eine Krawatte drucken "binden" und fragen wenn du nochmal spielen willst. Aber so weit ich gekommen bin.

+1

können Sie auch früher Code einfügen und zeigen, was Sie versucht haben, und Was wird erwartet und funktioniert nicht für Sie? –

+0

Sie können ein Diktat wie '{'rs': 'win', 'rr': 'tie',}' usw. machen. –

+0

Dies könnte für Sie nützlich sein: https://codereview.stackexchange.com/questions/80067/Simple-Rock-Papier-Schere-in-Python – smundlay

Antwort

2

Unter der Annahme von zwei Spielern gibt es drei mögliche Endspielzustände (gewinnen, verlieren, binden) und neun verschiedene Ergebnisse (Rock-Rock, Papier-Schere, etc.). Wenn Sie dies als ein Wörterbuch tun möchten, könnten Sie drei Schlüssel erstellen - einen für jeden Endspielzustand - wobei jeder Wert eine Liste ist, die die möglichen Spiele enthält, die zu diesem Ergebnis führen. Diese Spiele können als geordnete Paare gespeichert werden, wobei der erste Wert des Tupels die Wahl des Spielers und der zweite Wert das des Gegners ist. zB der Schlüssel-Wert-Paar für alle möglichen Win-Staaten wäre die folgende:

"win" : [("rock", "scissors"), ("paper", "rock"), ("scissors", "paper")] 

Sobald Sie Ihre dict aller möglichen Spiele haben, es ist nur eine Frage durch jeden Endzustand Schlüssel iterieren und zu prüfen, ob oder nicht die tuple der Entscheidungen, die vom Spieler und dem Gegner getroffen werden, ist innerhalb des list Wertes enthalten, der mit diesem Schlüssel verbunden ist. Wenn ja, dann hast du das Ergebnis des Spiels gefunden.

from random import choice 

answers = {"yes" : ["yes", "y"], 
      "no" : ["no", "n"]} 

choices = ["rock", "paper", "scissors"] 

games = {"win" : [(choices[0], choices[2]), 
        (choices[1], choices[0]), 
        (choices[2], choices[1])], 

     "lose" : [(choices[0], choices[1]), 
        (choices[1], choices[2]), 
        (choices[2], choices[0])], 

     "tie" : [(choices[0], choices[0]), 
        (choices[1], choices[1]), 
        (choices[2], choices[2])]} 

print("Let's play \"Rock, paper, scissors\"!\n") 

replay = True 

while replay: 

    player = "" 

    while player.lower() not in choices: 

     player = input("Rock, paper, or scissors?: ") 

    opponent = choice(choices) 

    print("You chose {}.".format(player.lower())) 
    print("Your opponent chose {}.".format(opponent)) 

    for outcome in games: 

     if (player.lower(), opponent) in games[outcome]: 

      print("You {} against your opponent!\n".format(outcome)) 

    replay_decision = "" 

    while replay_decision.lower() not in (answers["yes"] + answers["no"]): 

     replay_decision = input("Would you like to play again? [y/n]: ") 

     if replay_decision.lower() in answers["no"]: 

      replay = False 

print("\nThanks for playing!") 

, die die folgende Beispielausgabe erzeugt:

In diesem Sinne könnte man so etwas wie das folgende tun

Let's play "Rock, paper, scissors"! 

Rock, paper, or scissors?: rock 
You chose rock. 
Your opponent chose rock. 
You tie against your opponent! 

Would you like to play again? [y/n]: y 
Rock, paper, or scissors?: paper 
You chose paper. 
Your opponent chose rock. 
You win against your opponent! 

Would you like to play again? [y/n]: y 
Rock, paper, or scissors?: scissors 
You chose scissors. 
Your opponent chose paper. 
You win against your opponent! 

Would you like to play again? [y/n]: n 

Thanks for playing!