You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()的问题:

  1. 把分支判断移到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
  1. 三元表达式仅返回字符串,不内嵌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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:18:01