退出功能会导致

2024-06-12 20:09:12 发布

您现在位置:Python中文网/ 问答频道 /正文

def prime_func():
    counter = 0
    composites = [2]
    primes = [3]
    for x in range(4, 50):
        for y in range(2, x):
            a = x/y
            if a - int(a) == 0:
                composites = composites + [x]
            else:
                primes = primes + [x]
                counter = counter + 1
                if counter == args[1]:
                    return counter, composites, primes
                else:
                    pass

prime_func()

counter1, composites1, primes1 = prime_func()

print(counter1)

仅供参考,这是我第一个正式的Python脚本。如果您需要上下文,一旦给定一个输入(我没有包括这个位,不要被args部分混淆),它最终将计算第x个素数。你知道吗

运行此代码时,我收到错误消息NoneType object is not iterable。我在网上看了一下,这个消息主要是在函数没有实际返回任何内容时给出的。有人能帮我把这个结构修好吗?你知道吗

最初countercompositesprimes是在函数外部定义的,并作为输入提供,但我对此进行了更改,以查看是否有任何变化。你知道吗

我听说像这样的变量(全局?)不应该在函数内部设置。你知道吗


Tags: 函数in消息forifdefcounterargs
3条回答

我假设在给定的范围0中没有足够的素数。。49,因此中断条件counter == args[1]永远不会应用,函数返回None。你知道吗

最好将所有重要参数传递到一个函数中,不要使用硬编码常量,这会使函数更加灵活。你知道吗

要获得更有效的算法,请查看:https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

def is_prime(a):
    for y in range(2, a):
        if a % y == 0:  # the modulo operation finds the remainder after division
            return False
    return True

# pass end condition into function, args[1] is a global variable
def prime_func(max_value, max_prime_count=10): 
    # you don't need a counter len(primes) do the same, also counter should start a 1
    primes = [3]

    for x in range(4, max_value):
        if is_prime(x):
            primes.append(x)
            if len(primes) == max_prime_count:
                break  # max prime count reached

    # calculates composites by set operation
    composites = set(range(2, max_value)) - set(primes)
    # also works if max_prime_count is not reached
    return sorted(composites), primes


composites, primes = prime_func(50, 10)

print(composites)
print(primes)
print(len(primes))

在代码中,应该尝试在函数中每个可能的退出点返回值。如果所有的代码都到达了该点,并且没有返回或没有进一步的操作,那么它将作为None返回

与您的代码一样,如果代码完成for循环并且没有转到任何return语句,那么它将作为None返回

在一对点上缺少break。此外,这项工作在进行中不是质数查找在这一点上,它将简单地找到偶数和奇数,因为如何循环的结构。你知道吗

相关问题 更多 >