HackerRank FizzBuzz测试程序循环不生效,仅输出单个结果的原因咨询
代码运行异常的核心原因
- 循环被提前强制终止:
return语句的作用是立即结束当前函数的执行,将对应值返回给调用位置。你把所有判断分支的return都写在了for循环内部,程序第一次遍历到数字列表的第一个元素时,不管匹配哪个判断分支,只要碰到return,整个函数就会直接退出,根本不会继续执行后续的循环迭代。哪怕你传入的n是100,函数最终也只会返回列表第一个元素1,自然得不到全量输出结果。 - 整除判断逻辑完全无效:Python 3 中使用
/做除法运算时,无论被除数是否能被除数整除,返回值永远是浮点数类型。比如计算6/3得到的结果是2.0,不是整数类型,你写的type(m3) == int、type(m5) == int这类判断永远不会成立,判断逻辑从底层就无法正常工作。
修正方案
- 不要在循环内部直接返回单个结果,提前初始化空列表收集每一轮循环的计算结果,等所有迭代全部完成后,再统一返回整个结果列表,保证循环能跑完全部n次遍历。
- 替换掉错误的整除判断方式,用取模运算判断是否能被整除:如果数字对3取模结果为0,代表能被3整除;对5取模结果为0,代表能被5整除,不需要先做除法再判断返回值类型。
修正后的可运行参考代码:
def fizzBuzz(n): res = [] for num in range(1, n + 1): if num % 3 == 0 and num % 5 == 0: res.append("FizzBuzz") elif num % 3 == 0: res.append("Fizz") elif num % 5 == 0: res.append("Buzz") else: res.append(str(num)) return res challenge = fizzBuzz(5) for item in challenge: print(item)
内容的提问来源于stack exchange,提问作者aryan barnwal
相关产品推荐
相关产品推荐

