【问题标题】:Jupyter note book not executing properlyJupyter 笔记本无法正常执行
【发布时间】:2026-01-22 18:30:01
【问题描述】:

您好,我最近在使用 jupyter notebook 时遇到了一些问题,想知道是否有人知道原因。

我有时会让程序不执行,它会有这个符号 [*] 所以我会重新启动内核。然后它执行。但是有时即使代码正确,它也不会产生正确的执行。所以我将重新启动内核并清除我的输出。这通常可以解决它。现在我正在解决这个问题,我要求用户回答一个数学问题,如果他们的输入总和是正确的,它会说如果错了它会说恭喜它会说他们得到了不正确的。该程序最初一直说 user_answer 未定义。然后它根本没有给我一个错误,而是会跳过 if 语句并打印出 else: 语句,即使用户给出的答案是正确的。是我的代码吗?或者它是我正在使用的编辑器,如果是,我怎样才能让它正确执行。我正在尝试学习 python,但我发现这有点令人沮丧,因为我一半时间不知道是我的代码还是编辑器。

这是我的代码:

import random

number_1 = random.randint(1,250)
number_2 = random.randint(1,250)

def main():
    ask_question()
    check_answer(user_answer)

def ask_question():
    user_answer = int( input( "What is " +\ 
               str(number_1 )+ ' + ' +\
               str( number_2 ) + '? '))
    return user_answer

def check_answer( user_answer ):

    correct_answer = number_1 + number_2

    if user_answer == correct_answer:
        print("Congratulations", user_answer, +\
              "is correct!")
    else:
        print("Sorry that is not correct the" +\
              " answer should be", correct_answer)

main()

outputs:

**most common one**
What is 126 + 250? 8 (enter)
---------------------------------------------------- 
-----------------------
NameError                                 Traceback 
(most recent call last)
<ipython-input-2-99955f4e983a> in <module>
     29               " answer should be", 
correct_answer)
     30 
---> 31 main()
     32 

<ipython-input-2-99955f4e983a> in main()
      6 def main():
      7     ask_question()
----> 8     check_answer(user_answer)
      9 
     10 def ask_question():
NameError: name 'user_answer' is not defined

OR

I'll get this and i didn't change anything in my 
code..

What is 126 + 250? 376 (enter)
Sorry that is not correct the answer should be 376

【问题讨论】:

    标签: python-3.x function jupyter-notebook arguments return-value


    【解决方案1】:

    你的代码的主要功能有点错误。

    def main():
        ask_question()
        check_answer(user_answer)
    

    在 check_answer 函数中,将 user_answer 替换为用户输入的数字。因此,为 ask_question 函数分配一个变量,然后将其放入 check_answer 函数中。

    def main():
        user_answer = ask_question()
        check_answer(user_answer)
    

    此外,混合局部变量(函数内部的变量)和全局变量(函数外部的变量)也不是一个好主意。在您的情况下,您在 check_answer 函数中调用全局变量(number_1 和 number_2),这不是好的 python。 创建此代码的更好方法是只有一个函数选择两个随机数,询问用户答案并验证它是否正确。

    我无法重现另一个错误(答案错误)。

    【讨论】:

    • 是否有关于何时应该使用多个功能的经验法则?因为我把它作为一个练习题,而我关注的人把它分成了 3 个功能。事实上,我复制了他的代码以确保我做对了,但它似乎仍然失败了。所以我只使用 1 让它变得更简单,现在它工作正常。我确信在未来我不能只为它创建一个函数。
    • 没有硬性规定,但您应该为一项任务使用一种功能。它因程序员而异,也因您的功能试图实现的目标而异。如果您想了解有关编程最佳实践的更多信息,我建议您阅读 Robert Cecil Martin 的 Clean Code。这本书基于 Java,但对 python 也很有用。
    • 另外,如果您的问题已经解决,请将其标记为已回答。谢谢!
    • 感谢您的反馈。我会看书的。另外我如何将其标记为已回答..我是*的新手。
    • 我不确定自己(也是网站的新手!),但答案旁边应该有一个选项。