Python新手求助:实现指定题量返回及ABCD输入合法性校验
Python 功能问题修复方案
问题说明
我是Python新手,目前有两个功能实现遇到问题:
- 实现返回用户请求的题目数量(已完成错误提示,但需完善输入合法性校验);
- 需实现当用户输入非A、B、C、D(含大小写、其他字母、字符、数字)或为空时弹出错误提示,目前已完成非空校验,需完善输入范围限制。
修复后的代码及说明
1. 题目数量请求功能修复
原代码仅处理一次输入错误,且未处理非数字输入的异常,以下是完善后的版本:
def playquiz(): while True: print("你想回答多少道题目?") number_input = input() # 校验输入是否为数字 if not number_input.isdigit(): print("请输入有效的数字!") continue numberofquests = int(number_input) if numberofquests > 15: print("没有那么多题目,最多只能回答15道!") elif numberofquests <= 0: print("再见") exit(0) else: # 返回合法的题目数量 return numberofquests # 调用函数并获取用户请求的题目数 requested_count = playquiz() print(f"你选择回答 {requested_count} 道题目")
修复点:
- 使用
while True循环持续请求输入,直到用户输入合法值; - 添加非数字输入的校验逻辑;
- 最终返回用户请求的合法题目数量,方便后续逻辑调用。
2. 答题输入校验功能修复
原代码的输入校验逻辑存在位置错误和语法问题,以下是完善后的版本:
def new_game(): guesses = [] correct_guesses = 0 question_num = 1 # 假设questions和options为已定义的题目与选项集合 for key in questions: print("-------------------------") print(key) for i in options[question_num-1]: print(i) # 循环校验输入合法性 while True: guess = input("请输入选项(A、B、C或D):") guess = guess.upper() # 统一转为大写,兼容大小写输入 if not guess: print("不能留空,请重新输入!") elif guess not in {'A', 'B', 'C', 'D'}: print("必须输入A、B、C、D中的一个,请重新输入!") else: break # 输入合法,跳出循环 guesses.append(guess) correct_guesses += check_answer(questions.get(key), guess) question_num += 1 display_score(correct_guesses, guesses)
修复点:
- 将输入校验逻辑整合到一个
while True循环中,一次性处理空输入和非法字符; - 先将输入转为大写,确保大小写输入都能被正确识别;
- 直接判断输入是否在允许的选项集合
{'A','B','C','D'}中,逻辑清晰且覆盖所有非法输入情况; - 修复原代码中
isalpha()调用的语法错误和逻辑错误。
内容的提问来源于stack exchange,提问作者EMILY1979
相关产品推荐
相关产品推荐

