Python 3.x 在Python 3.6.1中创建素数列表并打印出该列表

Python 3.x 在Python 3.6.1中创建素数列表并打印出该列表,python-3.x,primes,series,Python 3.x,Primes,Series,我正在努力学习Python,但我对它还是相当陌生的。我正在尝试创建一个从2到用户将输入的数字的列表,并遍历该列表,从该列表中删除所有非素数,然后将其打印出来。我在计算时遇到问题,因为我不断地得到错误:列表索引超出范围。我曾考虑使用for循环,但是变量I将低于变量current,我需要确保在列表中始终高于current。我只允许在任务中使用基本函数和循环 counter = 2 current = 2 n = int( input( "Please enter a number larger

我正在努力学习Python,但我对它还是相当陌生的。我正在尝试创建一个从2到用户将输入的数字的列表,并遍历该列表,从该列表中删除所有非素数,然后将其打印出来。我在计算时遇到问题,因为我不断地得到错误:列表索引超出范围。我曾考虑使用for循环,但是变量I将低于变量current,我需要确保在列表中始终高于current。我只允许在任务中使用基本函数和循环

counter = 2

current = 2

n = int( input( "Please enter a number larger than 2. " ) )

while counter <= n:
    userList.append( counter )
    counter = counter + 1

print( "Printing out list " )
print( userList )

i = 1

while i <= len( userList ):
    if userList[ i ] % current == 0:
        userList.remove( userList[i] )
        i = i + 1
    else:
        current = current + 1

print( userList )
计数器=2
电流=2
n=int(输入(“请输入一个大于2的数字”)

而计数器在代码中有一些错误

1) 从大型列表中删除非常缓慢,因为您需要在删除的项目之后移动所有内容,以避免列表中的项目之间出现任何间隙。最好将项目标记为已删除,然后只打印其中剩下的内容

2) 通过使用您的算法,您需要两个while循环

3) 如果您得到了包含N个项目的列表,则列表的最后一个索引为(N-1)

更多Python解决方案:

#!/usr/bin/env python3

n = int(input("Maximal number: "))
numbers = list(range(2, n+1))

i = 0
while i < len(numbers):
    if numbers[i] != None:
        j = i + 1
        while j < len(numbers):
            if numbers[j] != None:
                if numbers[j] % numbers[i] == 0:
                    numbers[j] = None
            j += 1
    i += 1

print(list(filter(lambda x: x is not None, numbers)))`
#/usr/bin/env蟒蛇3
n=int(输入(“最大数:”)
数字=列表(范围(2,n+1))
i=0
而i
您的代码中有一些错误

1) 从大型列表中删除非常缓慢,因为您需要在删除的项目之后移动所有内容,以避免列表中的项目之间出现任何间隙。最好将项目标记为已删除,然后只打印其中剩下的内容

2) 通过使用您的算法,您需要两个while循环

3) 如果您得到了包含N个项目的列表,则列表的最后一个索引为(N-1)

更多Python解决方案:

#!/usr/bin/env python3

n = int(input("Maximal number: "))
numbers = list(range(2, n+1))

i = 0
while i < len(numbers):
    if numbers[i] != None:
        j = i + 1
        while j < len(numbers):
            if numbers[j] != None:
                if numbers[j] % numbers[i] == 0:
                    numbers[j] = None
            j += 1
    i += 1

print(list(filter(lambda x: x is not None, numbers)))`
#/usr/bin/env蟒蛇3
n=int(输入(“最大数:”)
数字=列表(范围(2,n+1))
i=0
而i
我明白。不过,这个任务只允许我使用基本循环和函数。不允许使用筛选器和lambda等关键字。我甚至不知道他们在做什么。基本上,我只允许使用代码中的内容,这是不正确的。基本上,您只是从未标记为已删除的值创建新列表。您可以很容易地将其重写为一个for循环和if语句。我理解。不过,这个任务只允许我使用基本循环和函数。不允许使用筛选器和lambda等关键字。我甚至不知道他们在做什么。基本上,我只允许使用代码中的内容,这是不正确的。基本上,您只是从未标记为已删除的值创建新列表。您可以轻松地将其重写为一个for循环和if语句。