如何修改FizzBuzz函数,使其迭代至指定数且第16次无None返回
解决FizzBuzz函数调用后输出None的问题
问题原因
你的fizzbizz函数内部通过print输出每一项,但函数没有定义return语句——Python中无返回值的函数默认返回None。当你在主程序中执行print(fizzbizz(15))时,会先执行函数内的所有打印操作,再打印函数的返回值None,这就是最后一行None的来源。
方案1:调整函数调用方式(最简修复)
直接调用函数,不用print包裹。因为函数内部已经完成所有打印工作,无需额外打印函数的返回值:
def fizzbizz(number): for i in range(1, number + 1): if i % 3 == 0 and i % 5 == 0: print("fizzBuzz") elif i % 3 == 0: print("fizz") elif i % 5 == 0: print("Buzz") else: print(str(i)) if __name__ == '__main__': fizzbizz(15) # 直接调用,去掉外层print
调用fizzbizz(16)时,输出到16后不会出现None。
方案2:修改函数返回结果(更符合封装逻辑)
让函数收集所有输出项并返回拼接后的字符串,主程序再打印该结果。这样函数有明确返回值,不会返回None:
def fizzbizz(number): result = [] for i in range(1, number + 1): if i % 3 == 0 and i % 5 == 0: result.append("fizzBuzz") elif i % 3 == 0: result.append("fizz") elif i % 5 == 0: result.append("Buzz") else: result.append(str(i)) return '\n'.join(result) # 将列表转为换行分隔的字符串 if __name__ == '__main__': print(fizzbizz(15))
这种方式下,调用fizzbizz(16)会输出到16,全程无None出现。
注:原代码的条件判断可简化——前面的
if已经排除了同时被3和5整除的情况,后续elif无需额外判断i%5 !=0或i%3 !=0。
内容的提问来源于stack exchange,提问作者Pratik Ghaware
相关产品推荐
相关产品推荐

