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

Python素数函数执行后返回None的原因排查(新手向)

嘿,刚接触编程的话遇到这种问题太正常啦!你的两个问题其实根源是同一个——Python函数的返回值规则,让我一步步给你拆解:

问题核心:函数缺少显式return语句

在Python里,如果一个函数没有写return语句,或者return后面没有跟任何值,函数执行完毕后会默认返回None。这就是你看到print(prime(30))最后输出None的原因。

先看你的代码:

def prime(n):
    prime = [True for i in range(n+1)] #用于表示素数[0,n]的布尔数组
    p=2
    while (p*p<=n):
        if prime[p]==True: #检查是否已标记
            for i in range(p*p,n+1,p):
                prime[i] = False #标记p的倍数
        p+=1
    for p in range(2,n): #获取标记为True的数值
        if prime[p]:
            print(p)
print(prime(30))

你的prime函数从头到尾只做了两件事:用埃氏筛标记素数,然后打印素数,但完全没有用return返回任何数据。所以当你调用prime(30)时,函数会先打印所有2到29的素数,然后返回默认的None,最后外面的print()把这个None也输出了。

两种解决思路

根据你的实际需求,你可以选其中一种方案:

  • 如果只想打印素数,不需要返回值:直接调用函数就行,不要把函数调用放进print()里:
    prime(30) # 这样只会打印素数,不会额外输出None
    
  • 如果想让函数返回素数列表,方便后续使用:修改函数,把打印的部分改成收集列表,然后显式返回:
    def prime(n):
        prime_list = [True for i in range(n+1)]
        p=2
        while (p*p<=n):
            if prime_list[p]==True:
                for i in range(p*p,n+1,p):
                    prime_list[i] = False
            p+=1
        # 收集所有素数到列表
        result = [p for p in range(2,n) if prime_list[p]]
        print(result) # 可选:如果还需要打印结果的话
        return result # 显式返回素数列表
    
    print(prime(30)) # 现在会打印列表内容,而不是None
    

内容的提问来源于stack exchange,提问作者Croman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:40