For循环错误:列表索引超出范围

时间:2017-10-12 06:51:29

标签: python-2.7 list class for-loop

所以我对编程很陌生,最近刚开始使用Classes,我们应该制作一个可以在单独的文本文件中加载的电话簿。

然而,当我进入for循环时,我继续遇到本节中的问题。

打了一堵砖墙
if storage[2] == permaStorage[i].number:

告诉我“IndexError:列表索引超出范围”。我几乎可以肯定它是由于permaStorage开始空了,但即使我试图用电话簿的临时实例填充它,它告诉我它超出范围。它的主要原因是检查permaStorage中是否已存在电话号码。

任何人都有一个很好的解决方法,如何解决这个问题或解决它?

(对不起,如果文字写得不好。刚加入这个网站,不确定风格)

class Phonebook():
  def __init__(self):
      self.name = ''
      self.number = ''

def Add(name1, number1):
  y = Phonebook()
  y.name = name1
  y.number = number1
  return y

def Main():
  permaStorage = []
  while True:
      print " add name number\n lookup name\n alias name newname\n change name number\n save filename\n load filename\n quit\n"
      choices = raw_input ("What would you like to do?: ")
      storage = choices.split(" ")
      if storage[0] == "add":
          for i in range(0, len(permaStorage)+1):
              if storage[2] == permaStorage[i].number:
                  print "This number already exists. No two people can have the same phonenumber!\n"
                  break
              if i == len(permaStorage):
                  print "hej"
                  try:
                      tempbox = Add(storage[1], storage[2])
                      permaStorage.append(tempbox)
                  except:
                      raw_input ("Remember to write name and phonenumber! Press any key to continue \n")

3 个答案:

答案 0 :(得分:0)

在python中索引从零开始。因此,长度为5的列表的最后一个元素索引从0开始为4.将范围更改为range(0, len(permastorage))

答案 1 :(得分:0)

你应该迭代到列表的最后一个元素,而不是超越。

尝试 -

for i in range(0, len(permaStorage)):

range()中生成的数字列表是从头开始的,但不包括结尾,所以range(3) == [0, 1, 2]

因此,如果您的列表x的长度为10,则range(0, len(x))将为您提供0到9,这是列表元素的正确索引。

1添加到len(x)会产生范围0 through 10,当您尝试访问x[10]时,它会失败。

答案 2 :(得分:0)

我认为问题是permaStorage是空列表然后你尝试:

for i in range(0, len(permaStorage)+1):
          if storage[2] == permaStorage[i].number:

会导致错误,因为permaStorage有0个项目,但你试图获得第一个(i = 0,permaStorage [0])项目。

我认为你应该用第一个替换第二个if子句:

for i in range(0, len(permaStorage)+1):    
    if i == len(permaStorage):
              print "hej"
              try:
                  tempbox = Add(storage[1], storage[2])
                  permaStorage.append(tempbox)
    if storage[2] == permaStorage[i].number:
              print "This number already exists. No two people can have the same phonenumber!\n"
              break

所以在这种情况下,如果perStorage为空,你将附加一些值,然后if if子句就可以了。