素数函数,返回函数

2024-06-16 09:29:45 发布

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

def primes_number(number = 5):
    for x in range(1, number):

        for y in range(2, x):

            if((number % x) == 0):

            else:
                print(y)

print(primes_number())
line 9
    else:
    ^
IndentationError: expected an indented block

为什么程序在这里看到问题? 当我删除else时:我只有“none”作为输出,这很奇怪


Tags: inannumberforifdeflinerange
3条回答

您的代码中有多个错误:

if((number % x) == 0):

现在我们已经完成了number变量的使用,它应该是x % y

for y in range(2, x):
    if((number % x) == 0):
    else:

这个else属于for,而不是if。我将在下面演示

        print(y)

如果成功,我们应该打印x,而不是y,除数

print(primes_number())

无需在此处打印,因为primes_number()不会返回任何内容,并且您已经在函数本身中完成了所有打印

这是一个对代码进行最小修改的工作版本:

def primes_number(number=30):
    for x in range(2, number):
        for y in range(2, int(x ** 0.5) + 1):
            if x % y == 0:
                break
        else:  # no break
            print(x)

primes_number()

我做了一次优化,只测试了整数平方根的除数

输出

% python3 test.py
2
3
5
7
11
13
17
19
23
29
% 

您需要在if下添加一些内容。Python需要代码。如果不想在那里添加任何内容,可以使用pass

这将使您的代码如下所示:

def primes_number(number = 5):
    for x in range(1, number):

        for y in range(2, x):

            if((number % x) == 0):
                pass
            else:
                print(y)

print(primes_number())

这里是更干净的版本; a) 已删除函数输出的打印,因为未返回任何输出 b) 跟踪primeDict(字典)中的所有素数

def primes_number(number = 5):
    primesDict = {}
    for x in range(1, number):

        for y in range(2, x):

            if((number % x) != 0):
                if y in primesDict : continue
                primesDict[y] = x
                print(y)

print(primes_number(number=7))

输出

2
3
4
5

相关问题 更多 >