Python 为什么我收到索引器:列表索引超出范围第37行?

Python 为什么我收到索引器:列表索引超出范围第37行?,python,Python,我写这段代码是为了得到名字、学生号和分数,然后找到最大值、报告和删除,但我有一个删除的问题,我无法消除它。当我运行时,我在第37行得到indexer:list索引超出范围,尽管我找不到问题所在 c=0 x=[] y=[] z=[] """o=int(input("enter menu:"))""" while True: print("o=1:::add ","o=2:::max ","o=3:::find ","o=4:::remove ","o=5:::report ","

我写这段代码是为了得到名字、学生号和分数,然后找到最大值、报告和删除,但我有一个删除的问题,我无法消除它。当我运行时,我在第37行得到indexer:list索引超出范围,尽管我找不到问题所在

c=0
x=[]
y=[]
z=[]
"""o=int(input("enter menu:"))"""
while True:
    print("o=1:::add  ","o=2:::max  ","o=3:::find  ","o=4:::remove  ","o=5:::report  ","o=6:::exit")
    o=int(input("enter menu:"))
    if o==1:
        x.append(input("enter name:"))
        z.append(int(input("enter #:")))
        y.append(int(input("enter score:")))
        c+=1

    elif o==2:
        i=1
        for i in range(len(x)):
            y[i]= y[i] if y[i]>y[i-1] else y[i-1]
            """i+=1"""
        f=y[i-1]
        print("max=",y[i-1])


    elif o==3:
        n=int(input("enter number:"))
        for i in range(len(x)):
            if n==z[i]:
                print(x[i],y[i])
            else:
                print("not found")
    elif o==4:
        p=int(input("enter student number:"))
        for i in range(len(x)):
            if p==z[i]:
                x.pop(i)
                y.pop(i)
                z.pop(i)
    elif o==5:
         for i in range(len(x)):
             print("name:",x[i],"st number:",z[i],"score:",y[i])
    elif o==6:
        break

我认为这可能是因为当您删除项目时,您不会在项目被删除后中断。然后,当您到达使用N个元素的列表末尾时,只剩下N-1个元素

在以下内容之后添加中断:

for i in range(len(x)):
    if p==z[i]:
        x.pop(i)
        y.pop(i)
        z.pop(i)
        break  # here
或者改用
查找
并重写为:

 position = x.find(p)
 if position != -1:
     x.pop(position)
     y.pop(position)
     z.pop(position)

因为您试图访问一个不存在的列表项-索引大于列表中的项数。请记住,列表索引是基于零的。您是否尝试过使用
try/except
块调试它,并在
except
套件中打印相关变量?现在可能是熟悉该模块的好时机。你能解释更多吗?为什么你说索引大于列表中的项目数?