为什么跳过if子句?

时间:2016-05-22 20:53:04

标签: python class oop python-3.x

# 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 = 1add()的目的是什么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)

3 个答案:

答案 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]