Python编程求助:实现整数打印及指定倍数替换功能
Python代码修正:FizzBuzz变种实现问题
需求说明
- 根据输入的
rounds数值,打印1到该数值的所有整数 - 能被3整除的数替换为文本文件中的随机单词
- 能被5整除的数替换为另一个随机单词
- 同时被3和5整除的数替换为两个随机单词的拼接
- 输入0或负数时,直接返回输入提示,不执行打印逻辑
当前代码存在的问题
- 条件判断顺序错误:同时被3和5整除的判断放在
elif分支,前面的if round %3 ==0会先触发,导致该条件永远无法执行 - 多余的循环else分支:
for循环后的else会在循环正常结束时执行,导致每次循环结束额外打印最后一个数值(即使该数值已经被替换打印) - 缺失输入合法性判断:没有处理输入0或负数的情况,会直接进入循环
- 变量命名冲突:使用Python内置函数名
round作为循环变量,存在潜在风险 - 冗余代码:
i和output变量未实际使用,属于无效代码
修正后的代码
方案一:单次输入内,所有3的倍数用同一个随机词,5的倍数用同一个随机词
import random # 预先读取并处理单词列表,避免重复IO操作 with open('sanat.txt', encoding='utf-8') as f: sanat = [line.strip() for line in f.readlines()] while True: try: maara = int(input("请输入轮数:")) except ValueError: print("请输入有效的整数") continue # 处理0或负数输入 if maara <= 0: continue # 单次输入内固定两个随机词 sana1 = random.choice(sanat) sana2 = random.choice(sanat) for round_num in range(1, maara + 1): if round_num % 3 == 0 and round_num % 5 == 0: print(f"{sana1}{sana2}") elif round_num % 3 == 0: print(sana1) elif round_num % 5 == 0: print(sana2) else: print(round_num)
方案二:每个符合条件的数都随机取新单词(更贴合“随机单词”的字面需求)
import random with open('sanat.txt', encoding='utf-8') as f: sanat = [line.strip() for line in f.readlines()] while True: try: maara = int(input("请输入轮数:")) except ValueError: print("请输入有效的整数") continue if maara <= 0: continue for round_num in range(1, maara + 1): if round_num % 3 == 0 and round_num % 5 == 0: print(f"{random.choice(sanat)}{random.choice(sanat)}") elif round_num % 3 == 0: print(random.choice(sanat)) elif round_num % 5 == 0: print(random.choice(sanat)) else: print(round_num)
修正后的测试效果(以方案二为例)
请输入轮数:0 请输入轮数:-1 请输入轮数:16 1 2 Foo 4 Python qux 7 8 foo bar 11 Bar 13 14 QuxFoo 16 请输入轮数:
内容的提问来源于stack exchange,提问作者sanni
相关产品推荐
相关产品推荐

