如何为FizzBuzz游戏实现计数到21时允许用户输入新规则的函数?
简单版解决方案
这个方案用字典存储规则,逻辑和你原来的代码接近,容易理解,还能轻松添加新规则:
# 初始化规则:键是要匹配的数字,值是对应的输出文本 rules = {3: "Fizz", 5: "Buzz"} count = 0 # 先计数到21 while count <= 21: output = "" # 遍历所有规则,符合条件就拼接文本 for num, text in rules.items(): if count % num == 0: output += text # 没匹配到规则就输出数字本身 print(output if output else count) count += 1 # 让用户添加新规则 print("\n现在可以添加新规则啦!") while True: try: num = int(input("请输入要匹配的数字(输入0结束添加):")) if num == 0: break text = input(f"请输入数字{num}对应的输出文本:") rules[num] = text print(f"已添加规则:{num} → {text}") except ValueError: print("请输入有效的数字哦!") # 继续计数,直到用户输入q停止 print("\n继续计数,输入'q'停止:") while True: output = "" for num, text in rules.items(): if count % num == 0: output += text print(output if output else count) count += 1 stop = input("按回车继续,输入'q'停止:").lower() if stop == 'q': break
简单版说明
- 用字典存规则,添加新规则就是往字典里加键值对,不用改核心的计数逻辑
- 代码里的注释会帮你理解每一步的作用,适合刚学Python的你上手
进阶版解决方案
如果想让代码更规整、方便后续扩展,可以把功能拆成独立函数,模块化的代码更容易维护和修改:
def get_fizzbuzz_output(count, rules): """根据当前计数和规则,返回对应的输出内容""" output = "" # 按数字从小到大排序规则,保证输出顺序统一(比如先Fizz再Buzz) for num in sorted(rules.keys()): if count % num == 0: output += rules[num] return output if output else count def add_new_rule(rules): """让用户添加/修改规则,返回更新后的规则字典""" print("\n=== 添加新规则 ===") while True: try: num_input = input("请输入匹配数字(输入0结束):") num = int(num_input) if num == 0: break # 如果数字已有规则,询问是否替换 if num in rules: confirm = input(f"数字{num}已有规则'{rules[num]}',是否替换?(y/n):").lower() if confirm != 'y': continue text = input(f"请输入数字{num}对应的文本:") rules[num] = text print(f"规则已更新:{num} → {text}") except ValueError: print(f"输入的'{num_input}'不是有效数字,请重新输入!") return rules def main(): # 初始配置 initial_rules = {3: "Fizz", 5: "Buzz"} start_count = 0 first_stop_at = 21 count = start_count rules = initial_rules.copy() # 第一次计数到21 print(f"=== 计数到{first_stop_at} ===") while count <= first_stop_at: print(get_fizzbuzz_output(count, rules)) count += 1 # 添加新规则 rules = add_new_rule(rules) # 继续计数直到用户停止 print("\n=== 继续计数 ===") while True: print(get_fizzbuzz_output(count, rules)) count += 1 user_input = input("按回车继续,输入'q'退出:").strip().lower() if user_input == 'q': print("游戏结束!") break if __name__ == "__main__": main()
进阶版说明
- 把生成输出、添加规则、主逻辑拆成不同函数,每部分只做一件事,逻辑更清晰
- 支持替换已有规则,还对用户输入做了更友好的错误处理
内容的提问来源于stack exchange,提问作者GalacticCurry
相关产品推荐
相关产品推荐

