FizzBuzz扩展游戏代码问题求助:用户输入验证失效
解决FizzBuzz游戏验证失败的问题
你的代码存在几个关键错误,导致无论输入什么都会触发错误提示,下面逐一说明并给出修正方案:
主要错误点
- 类型不匹配:
input()获取的是字符串类型,直接和整数x比较永远不相等,需要把x转为字符串再对比。 - FizzBuzz判断逻辑错误:
fizzbuzz = (x%3 and x%5 == 0)是错误的,正确逻辑应为x%3 == 0 and x%5 == 0,且这个判断需要优先于单独的Fizz/Buzz,因为同时满足两个条件的情况要优先匹配。 - 大小写不统一:代码里判断的是
"fizz"、"Fizzbuzz",但用户输入可能是"Fizz"或"FizzBuzz",应该统一将输入转为小写(或大写)避免大小写问题。 - 验证逻辑颠倒:当前代码没有根据
x的实际情况验证输入,而是不管x是什么,只要输入某个值就通过,不符合游戏规则——应该先确定当前x对应的正确输出,再和用户输入对比。
修正后的代码
print("Welcome to FizzBuzz.") print("Enter a number, Fizz, Buzz or FizzBuzz:") for x in range(1, 16): # 先确定当前数字对应的正确输出 correct_answer = "" if x % 3 == 0: correct_answer += "Fizz" if x % 5 == 0: correct_answer += "Buzz" # 如果都不满足,正确答案就是数字本身的字符串 if not correct_answer: correct_answer = str(x) # 获取用户输入并统一转为小写,避免大小写问题 user_input = input().strip().lower() # 把正确答案也转为小写,和用户输入对比 if user_input == correct_answer.lower(): print("Next") else: print("incorrect, game over") break # 错误后直接结束游戏
代码说明
- 先根据
x计算对应正确输出:能被3整除加"Fizz",能被5整除加"Buzz",都不满足则用数字的字符串形式。 - 将用户输入去除前后空格并转为小写,同时把正确答案也转为小写,确保大小写不影响判断。
- 对比输入和正确答案,正确则继续下一个数字,错误则打印提示并终止循环(游戏结束)。
内容的提问来源于stack exchange,提问作者Emma
相关产品推荐
相关产品推荐

