在“if”条件下使用变量时出现Python3 NameError

2024-06-25 22:45:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为“石头剪纸”编写一个简单的程序,它只是一个初级代码,但是我面临着一个变量的NameError,这个变量是我定义的,并且使用这个变量作为if的条件。我使用的是Python3。我在这里发布了我编写的程序:

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

Tags: orand程序makeifisplayerprint
3条回答

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

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

应该是

player1 = int(input("Player 1 plays "))
player2 = int(input("Player 2 plays "))

你还有print(player2 + " beats " + player1)+用于字符串串联,即将一个字符串粘贴到另一个字符串的末尾。但是,player1player2不是字符串。您需要使用,而不是+,或者执行str(player1)str(player2)。你知道吗

对您提供的代码进行这些更改时,我的输出只是垃圾邮件x beats y,这是由于您的代码逻辑中的错误造成的。你知道吗

player: type只是一个类型提示。它实际上不做任何事情,它是用来帮助代码分析的可读性和外部工具。它也不会像静态语言那样声明变量。你知道吗

在python中,要声明变量,必须给它赋值。所以呢

player1: int = int(input("Player 1 plays "))

使用类型提示和值赋值。你知道吗

注意:您想要的是player1==1,而不是player1 is 1is检查它们是否是同一个对象,而不是是否相等。你知道吗

假设您试图将输入值赋给这些变量,请使用赋值运算符。你知道吗

player1 = int(input("Player 1 plays "))
player2 = int(input("Player 2 plays "))

布朗尼点数:

  1. 正如在另一个答案中指出的,print语句中也有bug,您正在尝试连接int和string。做一些像print(str(player1) + " beats " + str(player2))

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

工作代码/演示:https://repl.it/repls/QuintessentialWittyAbilities

相关问题 更多 >