我正在努力学习Python,但我还是很陌生。我正在尝试创建一个数字列表,从2到用户将输入的数字,并通过列表并从该列表中删除所有非素数,然后将其打印出来。我无法计算,因为我一直收到错误:列表索引超出范围。我正在考虑使用for循环,但随后变量i将低于可变电流,我需要确保i总是高于当前列表中的当前值。我只被允许使用基本功能和循环来完成任务。
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 )
答案 0 :(得分:0)
您的代码中存在一些错误。
1)从大型列表中删除非常慢,因为您需要在删除项目之后移动所有内容以避免列表中的项目之间存在任何差距。最好将项目标记为已删除,然后只打印剩下的内容。
2)通过使用您的算法,您需要两个while循环。
3)如果你有N个项目的列表,那么列表的最后一个索引是(N-1)。
更多Pythonic解决方案:
#!/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)))`