Python函数内使用input占位符触发number1未定义NameError报错
错误原因
- 局部变量作用域问题:
number1、number2都是在quiz函数内部定义的局部变量,仅在函数内部生效,函数外部代码无法直接访问,所以外部调用这两个变量时会触发NameError。 - 函数定义与调用参数不匹配:定义
quiz函数时仅声明了1个入参answer,实际调用时传入了2个参数,运行时会触发参数数量不匹配的报错。 - 字符串格式化语法错误:input的提示字符串前没有加
f前缀,属于无效的f-string写法,无法自动解析占位符{number1}、{number2}的实际值。 - 代码执行逻辑顺序错误:当前代码先尝试获取用户输入、计算正确答案,再调用函数生成随机数,逻辑完全颠倒,就算解决作用域问题也无法正常实现答题功能。
- 函数内部变量访问问题:
quiz函数内部直接访问外部定义的correctanswer,也会因为作用域问题触发未定义报错。
修复方案
把随机数生成、题目输出、用户输入获取、对错判断的完整逻辑封装到quiz函数内部即可,调整后的可运行代码如下:
import random def quiz(): # 函数内部生成随机数,作用域覆盖整个函数可正常访问 number1 = random.randint(0,9) number2 = random.randint(0,9) correctanswer = number1 * number2 # 加f前缀启用f-string,正确解析变量替换占位符 answer = int(input(f"What is {number1} * {number2} ?")) if answer == correctanswer: print("Correct") else: print("Incorrect.") # 直接调用函数即可运行答题逻辑 quiz()
内容的提问来源于stack exchange,提问作者Modo
相关产品推荐
相关产品推荐

