在“if”条件下使用变量时出现Python 3名称错误

在“if”条件下使用变量时出现Python 3名称错误,python,python-3.x,Python,Python 3.x,我正在尝试为“石头剪纸机”编写一个简单的程序,这只是一个初级代码,但我定义了一个变量,并将该变量用于if条件,因此我面临命名错误。我正在使用Python 3。我正在发布我在这里编写的程序: player1count = 0 player2count = 0 print("Make a Choice: \n1.Stone\n2.Paper\n3.Scissor") player1 : int(input("Player 1 plays ")) player2 : int(input("Player

我正在尝试为“石头剪纸机”编写一个简单的程序,这只是一个初级代码,但我定义了一个变量,并将该变量用于if条件,因此我面临命名错误。我正在使用Python 3。我正在发布我在这里编写的程序:

player1count = 0
player2count = 0
print("Make a Choice: \n1.Stone\n2.Paper\n3.Scissor")
player1 : int(input("Player 1 plays "))
player2 : int(input("Player 2 plays "))
while (True):
    if player1 is 1 and player2 is 3 or player1 is 2 and player2 is 1 or player1 is 3 and player2 is 2:
        player1count += 1
        print(player1+" beats "+player2)
    elif player2 == 1 and player1 == 3 or player2 == 2 and player1 == 1 or player2 == 3 and player1 == 2:
        player2count += 1
        print(player2 + " beats " + player1)
    else:
        continue
    if(player1count == 5):
        print("Player 1 Wins!")
        break
    elif(player2count == 5):
        print("Player 2 Wins!")
    else:
        continue
这就是我得到的错误:

Make a Choice: 
1.Stone
2.Paper
3.Scissor
Player 1 plays 1
Player 2 plays 3
Traceback (most recent call last):
  File "G:/Study/Python/StonePaperScissor.py", line 7, in <module>
    if player1 is 1 and player2 is 3 or player1 is 2 and player2 is 1 or player1 is 3 and player2 is 2:
NameError: name 'player1' is not defined

Process finished with exit code 1

假设您试图将输入值分配给这些变量,请使用赋值运算符

player1 = int(input("Player 1 plays "))
player2 = int(input("Player 2 plays "))
布朗尼点数:

正如在另一个答案中指出的,print语句中也存在bug,您正在尝试concat int和string。执行类似printstrplayer1+beats+strplayer2的操作

也许你需要在循环中获取输入

工作代码/演示:

播放器:类型只是一个类型提示。它实际上并没有做任何事情,它只是用来帮助代码分析的可读性和外部工具。它也不会像在静态语言中那样声明变量

在python中,要声明变量,必须为其赋值。所以

player1: int = int(input("Player 1 plays "))
使用类型提示和值赋值


注意:您希望player1==1,而不是player1是1。is检查它们是否是相同的对象,而不是它们是否相等。

我没有收到您在运行代码时说的错误,但是我收到了其他错误:

player1 : int(input("Player 1 plays "))
player2 : int(input("Player 2 plays "))
应该是

player1 = int(input("Player 1 plays "))
player2 = int(input("Player 2 plays "))
您还拥有printplayer2+beats+player1+用于字符串连接,即将一个字符串粘贴到另一个字符串的末尾。但是,player1和player2不是字符串。您需要使用,而不是+或执行strplayer1和strplayer2


在对您提供的代码进行这些更改时,我的输出只是spams x beats y,这是由于您的代码逻辑中的错误造成的

既然你得到了你想要的答案,如果你愿意,我会给你一个提示来缩短代码。如果将值0,1,2指定给石头、布、剪刀,则If语句可以大大简化,如下所示:

你从计算机的选择中取值,例如剪刀=2,然后从中减去你选择的值,例如纸=1。现在减法的剩余部分决定了结果

制作两个列表,A=[-1,2]和B=[1,-2]

If outcome=0: draw
If outcome in B: you lose
If outcome in A: you win

这可能适用于您为选项提供的任何一系列值,只要它们是线性的。例如7,8,9

您能写出您收到的完整错误消息吗?is not==。player1:int。。。是类型定义,不是赋值。@samwalton我已经发布了输出itself@EliKorvigo哦,是的,谢谢,多么愚蠢的错误,我甚至没有意识到我尝试过做那些更改,这个错误对我来说很好,检查这里,明白了,谢谢!非常感谢,明白了,很抱歉这是一个愚蠢的错误,谢谢你的帮助是的,我没有意识到,这是一个愚蠢的基本错误,非常感谢,程序现在运行良好