# in file contactList.py
import contact
class ContactList:
def __init__(self):
self.added = True
self.list = []
def add(self, newContact):
added = 1
self.list.append(newContact)
def __str__(self):
if (self.added == True):
returnedString = ""
for contact in self.list:
returnedString = returnedString + "\n" + str(contact)
return returnedString
def find(self, name):
self.name = name
for contact in self.list:
if self.name == (str(contact))[0]: # I also tried if self.name in str(contact)
return str(contact)
else:
return "Invalid input"
if __name__ == "__main__":
myFriends = ContactList()
friend1 = contact.Contact("Mickey", "650-345-3333", "Mickey@disneyland.com", "Disneyland, California")
friend2 = contact.Contact("Minnie", "650-345-3344", "Minnie@disneyworld.com", "Disneyworld, Florida")
friend3 = contact.Contact("Donald", "650-345-3333", "Donald@EuroDisney.com", "EuroDisney, France")
myFriends.add(friend1)
myFriends.add(friend2)
myFriends.add(friend3)
print (myFriends)
print (myFriends.find("Mickey"))
我想知道为什么最后一次调用print (myFriends.find("Mickey"))
不会被shell迭代;相反,无论我在参数中添加什么,都会跳过它。例如,当我在参数中输入“Mickey”,“Minnie”或“Donald”时,我应该获得有关它们的相应个人信息,但find()
函数下的“if”子句是永远不会迭代。这有什么问题?此外,由于这是我添加find()
的代码段,我不确定self.added = True
中的__init__
和added = 1
中add()
的目的是什么1}}。
以下是导入此文件的contact()
contactList.py
#in file contact.py
class Contact:
"""
One object of class Contact represents one person's contact info.
"""
def __init__(self, name, phone, email, streetAddress):
self.name = name
self.phone = phone
self.email = email
self.streetAddress = streetAddress
def __str__(self):
return "%s\n%s\n%s\n%s\n" % (self.name, self.phone,self.email,self.streetAddress)
if __name__ == "__main__":
friend1 = Contact("Mickey", "650-345-3333", "Mickey@disneyland.com", "disneyland, CA")
print (friend1)
答案 0 :(得分:1)
您编写的代码只会检查列表中的第一个联系人。为了清楚起见,我只是重复你在这里写的内容:
def find(self, name):
self.name = name
for contact in self.list:
if self.name == (str(contact))[0]:
return str(contact)
else:
return "Invalid input"
现在要明确一点,让我们保留重要的部分:
if :# some condition is true
return str(contact)
else: # some condition is false
return "Invalid input"
正如您在任何一种情况下所看到的,您都会获得返回值。因此,如果它不是您列表中的第一个,那么您将无法找到您的价值,如果"某些条件"上面提到的是正确的或错误的。
编辑:要清楚明白,您需要在<{em> {{1}之后设置失败条件(返回&#34;无效输入&#34;或其他)循环,而不是里面的。这留给读者练习。
现在,对于您要检查的条件,根据您发布的for
课程的结构,我猜错了正确的检查:
Contact
很好,像python一样整洁应该是:)
祝你好运答案 1 :(得分:0)
(str(contact))[0]
给出contact
字符串表示的第一个字符。因此,一个字符永远不会等于具有多个字符的名称。
如果contact
具有索引访问权限且第一个索引实际上是名称,则应写入:
def find(self, name):
for contact in self.list:
if name == contact[0]:
return contact
else:
return "Invalid input"
答案 2 :(得分:-1)
为什么将if语句放在()中。你不必这样做。 如果self.added == True: 这样就可以了。
试试这个: 如果self.name == str(联系[0]) 而不是这个 if self.name ==(str(contact))[0]