gpt4 book ai didi

python - 通过迭代更改列表的元素(python)

转载 作者:行者123 更新时间:2023-11-30 22:57:06 25 4
gpt4 key购买 nike

我试图迭代一个列表(用户输入的范围),首先假设所有数字都是素数(P),然后让程序迭代该列表。当列表中的元素是P时,我想迭代范围内的所有倍数并将它们更改为N。当元素是N时,我希望程序移动到下一个数字(我将0和1设置为非素数) ,因为它们是异常(exception))。我遇到了索引问题,但是出现错误:

 list1[number1] = 'N'
IndexError: list assignment index out of range

当我运行我的程序时。这是代码:

# input

n = int(input("Enter a positive integer greater than or equal to 10: "))

while n < 10:
print ("Invalid! Try again")
int(input("Enter a positive integer greater than or equal to 10: "))


# create list
new_n = n + 1

list1 = ['P'] * new_n


# set non prime
list1[0] = 'N'
list1[1] = 'N'

# set up loop

counter = 0
for x in list1:
counter1 = 2
if list1[counter] == 'P':
for y in list1:
number1 = counter * counter1
list1[number1] = 'N'
counter1 += 1
counter += 1
else:
counter += 1

如有任何帮助,我们将不胜感激!谢谢。

最佳答案

在循环中,您仅将平方值设置为非素数,因为您在 counter1 的循环中迭代了 counter

然后你必须检查number1是否小于list1的大小。

您还必须将 counter+=1 放在 else 语句之外。否则,您将仅设置 2 的倍数(一旦您从 counter1 的循环中撤回 counter+=1)。

所以这段代码可以工作:

# set up loop
counter = 0
for x in list1:
counter1 = 2
if list1[counter] == 'P':
for y in list1:
number1 = counter * counter1
if number1 < len(list1):
list1[number1] = 'N'
counter1 += 1
counter += 1

此外,您应该使用 enumeraterange 简化代码:

# set up loop
for i, val in enumerate(list1):
if val == 'P':
for j in range(2, len(list1)):
if i*j < len(list1):
list1[i*j] = 'N'
else:
break

这是 n = 12 的结果:

 Enter a positive integer greater than or equal to 10: 12
['N', 'N', 'P', 'P', 'N', 'P', 'N', 'P', 'N', 'N', 'N', 'P', 'N']

编辑:counter+=1 放在 else 语句之外

关于python - 通过迭代更改列表的元素(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com