2017-09-11 3 views
0

J'essaie d'écrire une version assez facile de Rock Paper Scissors en Python 3 pour que les enfants d'âge scolaire puissent facilement comprendre et, espérons-le, se reproduire. En plus du jeu de base, je veux leur donner la possibilité d'entrer les noms d'un joueur1 et d'un joueur2, en utilisant% s pour que le programme l'imprime de nouveau. Je continue à obtenir cette erreur dans mon o/p:Python - Rock Paper Scissors - Inclure le nom d'utilisateur et le compteur

Player 1 name: me 
Player 2 name: you 
%s, what do you choose? Rock (1), Paper (2), or Scissors(3)? 
**Traceback (most recent call last): 
    File "C:/Users/xyz/PycharmProjects/rps/scorekeeping.py", line 11, in <module> 
    print("%s, what do you choose? Rock (1), Paper (2), or Scissors(3)?") % player1 
TypeError: unsupported operand type(s) for %: 'NoneType' and 'str'** 

J'essaie aussi d'inclure le compteur de points qui se met à jour à chaque tour (player1 vs player2). Habituellement, il se réinitialise à 0 par tour pour gagner/égalité/perdre.

S'il vous plaît aidez-moi à voir où le code a mal tourné. Merci!


player1 = input("Player 1 name: ") 
player2 = input("Player 2 name: ") 

while 1: 

    player1score = 0 
    player2score = 0 

    print("%s, what do you choose? Rock (1), Paper (2), or Scissors(3)?") % player1 

    choice1 = input("> ") 

    print("%s, what do you choose? Rock (1), Paper (2), or Scissors(3)?") % player2 

    choice2 = input("> ") 

    if choice1 == choice2 : 
     print("Its's a tie.") 
    elif choice1 - choice2 == 1 or choice2 - choice1 == 2 : 
     print("%s wins.") % player1 
     score1 = score1 + 1 
    else: 
     print("%s wins.") % player2 
     score2 = score2 + 1 

    print("%s: %d points. %s: %d points.") % (player1, score1, player2, score2) 
+0

Les points 1 et 2 ne sont pas initialisés. Je pense que vous avez besoin de parenthèses supplémentaires dans votre impression. Aussi, ne mettez pas vos scores à zéro dans la boucle. – Stefan

Répondre

2

Vous essayez de formater la valeur de retour de la fonction d'impression. Au lieu de cela, pour formater la chaîne que vous imprimez, essayez:

print("%s, what do you choose? Rock (1), Paper (2), or Scissors(3)?" % player1) 

pour la première instruction, par exemple. La mise en forme doit avoir lieu à l'intérieur de la parenthèse.

Afin de convertir votre valeur d'entrée à un nombre entier, essayez:

choice1 = int(input("> ")) 

Actuellement, vous réinitialisant le score à zéro au début de la boucle while. Pour empêcher la réinitialisation de vos compteurs de score, placez le

player1score = 0 
player2score = 0 

avant la boucle while.

+0

D'accord, je vois, corrigé maintenant. Maintenant, je reçois cette erreur: ** Traceback (dernier appel en dernier): Fichier "C: /Users/xyz/PycharmProjects/rps/scorekeeping.py", ligne 23, en elif choice1 - choice2 == 1 ou choice2 - choice1 == 2: TypeError: type (s) d'opérande non supporté (s) pour -: 'str' et 'str' ** Comment puis-je surmonter ce problème? – choga008

+0

Vous devez valider l'entrée de l'utilisateur pour être entier, puis convertir str en int. Si l'entrée de l'utilisateur n'est pas un entier, contactez-le. –