Python初学者 - 通过输入在列表中查找对象

时间:2016-04-13 12:59:52

标签: python python-3.x

Python新手在这里。我已经创建了一个带有一些hockeyteam对象的类,我把它放在一个列表中。我现在想让用户键入其中一个团队的名称并让程序在对象列表中找到它(后来我想将结果添加到团队中,但这暂时不是我的问题)

这是我到目前为止编写的代码。

class team:
    def __init__(self, name, wins, losses):
        self.name = name
        self.wins = wins
        self.losses = losses
    def __repr__(self):
        return '({} {} {})'.format(self.name, self.wins, self.losses)    

detroit_red_wings = team("Detroit".ljust(10), 2, 1)
los_angeles_kings = team("Los Angeles".ljust(10), 2, 0)
toronto_maple_leafs = team("Toronto".ljust(10), 0, 1)

teamlist = [detroit_red_wings, los_angeles_kings, toronto_maple_leafs]
print(teamlist)

def input_results():
    home_team = input("Type in the home team: ")
    for i in teamlist:
        if i.name == home_team:
            print("the team was found!")
        else:
            print("the team was not found! ")

input_results()

我得到的结果是程序写了三次“团队没找到”!

3 个答案:

答案 0 :(得分:3)

您的代码存在两个问题:

  1. 您正在寻找您的团队名称,但是当您创建自己的团队名称时 team个对象为团队名称添加了空格(.ljust(10) 部分)。所以你在寻找比赛时必须再次剥夺它们 (下面代码中的rstrip()部分)

  2. 您正在打印“未找到团队!”每次如果找不到匹配项。 return结果最好。

  3. 您的代码的更新版本:

    def input_results():
        home_team = input("Type in the home team: ")
        if home_team.rstrip() in teamlist:
            return "the team was found!"
        else:
            return "the team was not found! "
    
    result = input_results()
    print(result)
    

答案 1 :(得分:1)

我会通过忽略大写(通过在比较之前转换为大写)和前导/尾随空格(通过使用strip()方法)来使条件更容易。可能你没有得到结果,因为你使用的ljust(10)在字符串的右侧增加了空格,直到它至少有10个字符长。

您也可以使用in支票代替for循环:

def input_results():
    home_team = input("Type in the home team: ")
    if home_team.strip().upper() in (team.strip().upper() for team in teamlist):
        print("the team was found!")
    else:
        print("the team was not found! ")

答案 2 :(得分:0)

由于您在输入和团队名称上进行了字符串比较,因此需要将两者完全匹配才能找到团队?#39;无论出于何种原因,您都要在团队名称中添加一堆填充,因此您的底特律团队名称实际上是"Detroit "。这很可能就是问题所在。