Python判断阿姆斯特朗数的else分支为何会额外打印None?
问题原因
核心问题是你在print()的入参三元表达式中嵌套了print()调用:
- Python中
print()函数本身没有返回值,执行完成后默认返回None - 你代码中外层
print()的入参是如下三元表达式:"Yes {0} is an Armstrong Number".format(x) if(sum==x) else print("No {0} is not an Armstrong Number".format(x)) - 当满足
sum==x条件时,三元表达式返回的是可打印的字符串,外层print()正常输出内容,不会出现异常 - 当触发else分支时,会先执行else后的
print("No...")输出非阿姆斯特朗数的提示,随后这个内层print()返回的None会作为三元表达式的结果传给外层print(),最终就额外多输出了一个None
修复方案
有两种常用的修改方式,都可以避免嵌套print()的问题:
- 把分支判断移到
print()外部
def armstrong(x): number = str(x) length = len(number) sum=0 for i in number: sum = sum + pow(int(i),length) if sum == x: print("Yes {0} is an Armstrong Number".format(x)) else: print("No {0} is not an Armstrong Number".format(x)) return 0
- 三元表达式仅返回字符串,不内嵌
print()
def armstrong(x): number = str(x) length = len(number) sum=0 for i in number: sum = sum + pow(int(i),length) print("Yes {0} is an Armstrong Number".format(x) if sum==x else "No {0} is not an Armstrong Number".format(x)) return 0
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

