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

托·诺德马克

因此,我对编程还是比较陌生的,最近才开始学习Classes,我们应该制作一个可以在单独的文本文件中加载的电话簿。

但是,在进入for循环时,我会一直遇到本节中的问题。它撞上了砖墙

if storage[2] == permaStorage[i].number:

并告诉我“ IndexError:列表索引超出范围”。我几乎可以肯定这是由于permaStorage最初是空的,但是即使当我尝试用Phonebook的临时实例填充它时,它也会告诉我它超出范围。这样做的主要原因是要检查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")
瓦西里·布朗斯基(Vasily Bronsky)

我认为问题在于permaStorage为空列表,然后您尝试执行以下操作:

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

会导致错误,因为permaStorage有0个项目,但是您尝试获取第一个(i = 0,permaStorage [0])项目。

我认为您应该将第一个if子句替换为第一个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子句就可以了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章