FizzBuzz代码输出None异常求助,请求排查原因与修复
FizzBuzz代码输出None及逻辑错误排查
你的代码存在几个关键问题,导致输出异常和None:
- 缩进错误彻底打乱逻辑:
for循环下只有string = ""属于循环体,后续的条件判断、打印都在循环外部,循环结束后num固定为49,只会执行一次判断;同时print(string)只缩进在第三个if分支里,只有当数字既不是3也不是5的倍数时才会打印,其他情况完全没有输出。 - 函数无返回值导致输出None:你用
print(FizzBuzz(raw_input()))调用函数,但FizzBuzz没有return语句,Python函数默认返回None,所以外层print会输出这个默认返回值。 - 参数未使用且输入类型错误:函数定义的
num参数被循环内的num覆盖,完全没用到;raw_input()获取的是字符串,即便要使用也需要转成整数。 - 语法版本混用:代码同时出现
print(string)(Python3写法)和print FizzBuzz(...)(Python2写法),语法不统一。
修正后的代码
def FizzBuzz(end_num): # 将输入转为整数,作为循环的结束值 end_num = int(end_num) for num in range(1, end_num + 1): string = "" if num % 3 == 0: string += "Fizz" if num % 5 == 0: string += "Buzz" # 若string为空,说明不是3或5的倍数,赋值为数字字符串 if not string: string = str(num) print(string) # 直接调用函数,无需外层print,避免输出None FizzBuzz(raw_input())
修正说明
- 统一缩进,让所有判断和打印逻辑都在
for循环体内,确保每个数字都被处理 - 用上函数参数,将用户输入转为整数作为循环终点(替代原来固定的50,更灵活)
- 简化判断逻辑,通过
if not string直接处理非3/5倍数的情况 - 移除外层
print,函数内部直接完成打印,避免输出默认返回的None - 统一语法风格(如果使用Python3,可将
raw_input()改为input())
内容的提问来源于stack exchange,提问作者LoveBugg
相关产品推荐
相关产品推荐

