Python 是否列出未更新的元素?

Python 是否列出未更新的元素?,python,Python,在这个程序中,我试图使它成为这样,给定从索引0到n+1(n是用户输入的值)的字符“p”的元素列表,如果元素的索引是非素数,那么元素将从“p”更新为“NP”。在我的代码中,我创建了一个for循环,该循环将通过列表元素递增,对于每个元素,它将该元素的索引放入另一个for循环,在该循环中,它将所有索引为原始索引的倍数的元素都转换为“NP” 然而,出于某种原因,当我输入值10来创建一个包含11个元素的列表(索引范围为0-10)时,它返回这个列表:['NP','NP','p','NP','NP','NP'

在这个程序中,我试图使它成为这样,给定从索引0到n+1(n是用户输入的值)的字符“p”的元素列表,如果元素的索引是非素数,那么元素将从“p”更新为“NP”。在我的代码中,我创建了一个for循环,该循环将通过列表元素递增,对于每个元素,它将该元素的索引放入另一个for循环,在该循环中,它将所有索引为原始索引的倍数的元素都转换为“NP”

然而,出于某种原因,当我输入值10来创建一个包含11个元素的列表(索引范围为0-10)时,它返回这个列表:['NP','NP','p','NP','NP','NP','NP','NP','NP','NP'],我想知道为什么它会将索引2处元素后面的所有元素都转换为'NP'

listOfNum = []
count = 2
divCheck = 1

while True:
    userNum = int(input("Enter number of elements greater than or equal to 10: "))
    if userNum < 10:
        print("Invalid input, input must be higher than or equal to 10")
    elif userNum >= 10:
        listOfNum = ['P'] * (userNum + 1)
        listOfNum[0] = "NP"
        listOfNum[1] = "NP"
        for i in range(2, userNum+1):
            if listOfNum[i] == "NP":
                continue
            elif listOfNum[i] == "P":
                for z in range(i+1, userNum+1):
                    if ((listOfNum.index(listOfNum[z]) % listOfNum.index(listOfNum[i])) != 0):
                        continue 
                    elif (listOfNum.index(listOfNum[z]) % listOfNum.index(listOfNum[i])) == 0:
                        listOfNum[z] = "NP"
            print(listOfNum)
            break  ```

listOfNum=[]
计数=2
divCheck=1
尽管如此:
userNum=int(输入(“输入大于或等于10的元素数:”)
如果userNum<10:
打印(“无效输入,输入必须大于或等于10”)
elif userNum>=10:
listOfNum=['P']*(userNum+1)
listOfNum[0]=“NP”
listOfNum[1]=“NP”
对于范围内的i(2,userNum+1):
如果listOfNum[i]=“NP”:
持续
elif listOfNum[i]=“P”:
对于范围内的z(i+1,userNum+1):
如果((listOfNum.index(listOfNum[z])%listOfNum.index(listOfNum[i])!=0):
继续
elif(listOfNum.index(listOfNum[z])%listOfNum.index(listOfNum[i])==0:
listOfNum[z]=“NP”
打印(列表编号)
中断```
listOfNum.index(listOfNum[z])
是一个很大的“否”,因为它从列表开始线性查找元素的值,所以返回第一个元素

替换为
z
,这是您在
范围
循环中定义的索引

if ((listOfNum.index(listOfNum[z]) % listOfNum.index(listOfNum[i])) != 0):
变成

if z % i:
不确定是否还有其他问题,但它应该工作得更好

下面是对
z
循环的更简单的重写:

for z in range(i+1, userNum+1):
     if z % i == 0:
        listOfNum[z] = "NP"

argh
listOfNum.index(listOfNum[i])
返回第一个匹配项。只要在你的情况下使用
z
!哇,我想我想我想得太多了,太谢谢你了!