Python函数调用报错及重复请求等级输入问题求助
问题解决步骤
1. 修复TypeError错误
integer_generator函数返回的是包含两个整数的元组(x, y),直接传给question_generator时,Python会把整个元组当作第一个参数,而question_generator需要两个独立参数。解决方法是用**解包操作符***将元组拆分为两个参数:
question_generator(*integer_generator(level))
2. 实现仅输入一次等级
把get_level()的调用移到ten_questions的循环外部,只获取一次等级,之后在循环内重复使用该等级生成题目:
def ten_questions(): level = get_level() # 仅执行一次等级输入 num_of_questions = 0 while num_of_questions < 10: # 生成10道题,原逻辑<=10会生成11道 question_generator(*integer_generator(level)) num_of_questions += 1
3. 修复get_level函数的逻辑漏洞
原函数中return语句位置错误,会导致输入无效时返回未定义变量。修改为获取有效等级后直接返回:
def get_level(): while True: try: level_input = int(input("Level: ")) if level_input in [1,2,3]: return level_input except ValueError: pass # 输入非数字时继续循环
修改后的完整代码
import random def get_level(): while True: try: level_input = int(input("Level: ")) if level_input in [1,2,3]: return level_input except ValueError: pass def integer_generator(level): if level == 1: x = random.randint(1,9) y = random.randint(1,9) elif level == 2: x = random.randint(10, 99) y = random.randint(10, 99) else: x = random.randint(100, 999) y = random.randint(100, 999) return x, y def question_generator(x, y): real_answer = x + y while True: try: answer_given = input(f"{x} + {y} = ") if int(answer_given) == real_answer: print("Correct") break else: print("EEE") except ValueError: print("EEE") def ten_questions(): level = get_level() num_of_questions = 0 while num_of_questions < 10: question_generator(*integer_generator(level)) num_of_questions += 1 ten_questions() if __name__ == "__main__": ten_questions()
额外优化说明
- 调整循环条件为
<10,确保严格生成10道题 - 使用f-string简化字符串拼接,提升代码可读性
- 捕获特定的
ValueError而非所有异常,避免隐藏其他潜在错误
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

