2017-09-11 32 views
0

我想写一个轻松的版本的岩石剪刀在Python 3中小学年龄的孩子很容易理解和希望重现。蟒蛇 - 岩石剪刀 - 包括输入用户名和计分器

除了基本游戏之外,我还希望为他们输入player1和player2的名称,使用%s,以便程序将其打印出来。我一直在我的O/P收到此错误:

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'** 

我也试图包括更新本身每一轮(PLAYER1 VS player2)的比分反超。通常情况下,每回合重置为0赢/平局/输。

请帮我看看代码出错的地方。谢谢!


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

Score1和2未初始化。我认为你的印刷品需要额外的括号。另外,不要将循环中的分数归零。 – Stefan

回答

2

你试图格式化打印功能的返回值。相反,要格式化正在打印的字符串,请尝试:

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

例如对于第一个语句。格式应该在括号内发生。

为了您的输入值转换为整数,请尝试:

choice1 = int(input("> ")) 

目前,你的得分在while循环的开始重置为零。要停止您的分数计数器重置,请在while循环之前放置

player1score = 0 
player2score = 0 

+0

好的,我明白了,现在解决了。现在我得到这个错误: **回溯(最近呼叫最后): 文件“C:/Users/xyz/PycharmProjects/rps/scorekeeping.py”,第23行,在 elif choice1 - choice2 == 1或choice2 - choice1 == 2: TypeError:不支持的操作数类型为 - :'str'和'str'**我如何克服这个问题? – choga008

+0

您需要验证用户输入为整数,然后将str转换为int。如果用户输入不是整数 - 请重新评估他。 –