为何FizzBuzz代码中组合条件放在单个条件后无法生效?
FizzBuzz问题排查:为何无法输出"fizzbuzz"
我尝试用Python实现经典的FizzBuzz问题,但发现程序不会检查同时被3和5整除的组合条件。当数字同时满足两个条件时,只会输出"fizz"或"buzz",而非预期的"fizzbuzz",以下是我的代码:
i = 0 while i + 1 < 100: i = i + 1 if i % 3 == 0: print(str(i) + " fizz") elif i % 5 == 0: print(str(i) + " buzz") elif (i % 3 == 0 and i % 5 == 0): print(str(i) + " fizzbuzz") else: print(str(i))
问题原因
核心问题出在条件判断的顺序上。Python的if-elif-else结构是自上而下依次校验条件,只要某个条件匹配成功,就会执行对应的代码块,之后的所有条件都会被跳过,不再检查。
当数字同时能被3和5整除时,它会首先命中第一个if i % 3 == 0的条件,直接执行打印"fizz"的语句,完全不会走到后面的elif (i %3 ==0 and i%5 ==0)判断分支,所以永远不会输出"fizzbuzz"。
修正方案
把优先级最高的「同时被3和5整除」的条件放到最前面,确保它先被校验:
i = 0 while i + 1 < 100: i = i + 1 if i % 3 == 0 and i % 5 == 0: print(f"{i} fizzbuzz") elif i % 3 == 0: print(f"{i} fizz") elif i % 5 == 0: print(f"{i} buzz") else: print(i)
另外可以用Python的f-string简化字符串拼接,让代码更简洁易读。
内容的提问来源于stack exchange,提问作者Marc Oli
相关产品推荐
相关产品推荐

