所以我对编程很陌生,最近刚开始使用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")
答案 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子句就可以了。