【问题标题】:Why does python return "NameError: name 'correct' is not defined when it has been defined?为什么python在定义时返回“NameError:名称'正确'未定义?
【发布时间】:2021-08-07 15:19:16
【问题描述】:

基本上我在做一个测验,python 返回一个错误,说下面显示的变量在定义时是未定义的。

def guesscheck(guess, answer):
    correct = "null"
    print(lives * '\u2665')
    if guess.upper() == answer:
        print("Marvelous! That is correct!")
        correct = True
        return correct 
    if guess.upper() != answer:
        print("That is incorrect.")
        correct = False
        return correct

lives = 3
guess = input("ok: ")
guesscheck(guess, "OK")
if correct == False:
    lives = lives - 1
    print(lives * '\u2665')

如您所见,我调用了应该将变量“正确”定义为 True 或 False 的函数并将其返回给程序的其余部分,但由于某种原因它显示为未定义。请帮帮我!

【问题讨论】:

  • 很难说,因为你还没有格式化代码,但似乎问题是correct 在函数的本地范围内,尝试在函数定义的顶部添加global correct
  • 它只在guesscheck 函数的主体中定义。见docs.python.org/3/tutorial/…
  • @Mattiiss 我会试试的。
  • 即使是这样,你在代码中的什么地方使用了循环?
  • @JustANoobProgrammer,是的,return <variable> 语句确实返回了一些东西,但既不是变量的名称,也不是值,而是引用。为了使用引用,您必须按照许多答案的建议将其分配给您自己的变量。

标签: python


【解决方案1】:

你应该从你的函数中返回correct变量,然后然后在调用guesscheck时访问它:

def guesscheck(guess, answer):
    # This variable declaration is not necessary
    # correct = "null"
    #
    # Instead, you can assign it to the answer check
    correct = guess.upper() == answer

    print(lives * '\u2665')

    if correct:
        print("Marvelous! That is correct!")

    # You can use an else-clause here
    else:
        print("That is incorrect.")

    return correct

然后像这样访问它:

lives = 3
guess = input("ok: ")
correct = guesscheck(guess, "OK")
# No need for `correct == False`
if not correct:
    lives = lives - 1
    print(lives * '\u2665')

【讨论】:

  • “如果不正确:”本质上是“正确==错误:”的重写版本吗?
  • 其实not correctalso checks for additional things,比如空字符串和空列表,虽然correct == False严格检查布尔值False,但是由于guesscheck只返回一个布尔值,在你的情况他们是等价的。
【解决方案2】:

试试下面的(注意在主循环中是如何正确使用的)

def guesscheck(guess, answer):
    correct = "null"
    print(lives * '\u2665')
    if guess.upper() == answer:
        print("Marvelous! That is correct!")
        correct = True
        return correct 
    if guess.upper() != answer:
        print("That is incorrect.")
        correct = False
        return correct

lives = 3
while lives:
    guess = input("ok: ")
    correct = guesscheck(guess, "OK")
    if not correct:
        lives = lives - 1
        print(lives * '\u2665')

【讨论】:

  • 谢谢,不过,代码一直在运行,我需要它在某个时候停止,以便我可以在测验代码中输入多个问题。
  • @JustANoobProgrammer 我认为没有理由让correct 成为全球性的——不是吗?
【解决方案3】:

你没有在函数之外定义correct,它只在本地范围内可用。

在外部范围分配应该可以解决您的问题。

correct = guesscheck(guess, "OK")

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 2022-06-15
    • 2013-01-26
    • 1970-01-01
    • 2014-06-20
    • 2020-09-04
    • 2021-10-18
    相关资源
    最近更新 更多