Class 使用用户输入调用类

Class 使用用户输入调用类,class,python-3.x,methods,Class,Python 3.x,Methods,我对Python和编程非常陌生。我试图创建一个小程序,告诉你NFL球队的四分卫。我让它工作了,但我想看看是否有一种重复性更少的方法,原因有两个: 这样我就不用打字了,而且 因为这样可以缩短我的代码 我试着让用户输入插件到类调用中,这样我就不必输入那么多并使用大量的elif命令,例如: x= input("")` print (x.qb,x.num) 这是我到目前为止所拥有的。现在可以了,但我想用一种更简单的方法来完成: class football: def __init__(se

我对Python和编程非常陌生。我试图创建一个小程序,告诉你NFL球队的四分卫。我让它工作了,但我想看看是否有一种重复性更少的方法,原因有两个:

  • 这样我就不用打字了,而且
  • 因为这样可以缩短我的代码
我试着让用户输入插件到类调用中,这样我就不必输入那么多并使用大量的
elif
命令,例如:

x= input("")`
print (x.qb,x.num)
这是我到目前为止所拥有的。现在可以了,但我想用一种更简单的方法来完成:

class football:
    def __init__(self,qb,num):                                                                                         
        self.qb = qb
        self.num = num

Niners = football("Gabbert", "02" )
Bears = football("CUTLER, JAY","06") 
Bengals = football ("Dalton, Andy","14")
Bills =football (" Taylor, Tyrod", "05")
Broncos =football ("Sanchez, Mark", "06")
Browns =football ("MCCOWN, JOSH", "13")
Bucaneers =football ("Winston, Jameis", "03")
Cardinals =football ("PALMER, CARSON", "03")
Chargers =football ("RIVERS, PHILIP", "17")
Cheifs =football ("SMITH, ALEX", '11')
Colts =football ("Luck, Andrew",' 12' )
Cowboys =football ("Romo,Tony","09")
Dolphins =football ("Tannehill, Ryan", '17' )
Eagles =football ("Bradford, Sam", '07')
Falcons =football ("RYAN, MATT",' 02' )
Giants =football ("MANNING, ELI", '10' )
Jaguars =football ("Bortles, Blake", '05')
Jets =football ("Smith, Geno",' 07' )
Lions =football ("Stafford, Matthew", '09' )
Packers =football ("RODGERS, AARON", '12')
Panthers =football ("Newton, Cam",' 01' )
Patriots =football ("BRADY, TOM", '12')
Raiders =football ("Carr, Derek",' 04')
Rams =football ("Foles, Nick", '05')
Ravens =football ("FLACCO, JOE",' 05')
Redskins =football ("Cousins, Kirk", '08')
Saints =football ("BREES, DREW",' 09' )
Seahawks =football ("Wilson, Russell", '03')
Steelers =football ("ROETHLISBERGER, BEN",' 07')
Texans =football ("Osweiler, Brock", '17')
Titans =football ("Mariota, Marcus",' 08' ) 
Vikings=football ("Bridgewater, Teddy", '05' )

def decor(func):
    def wrap():
        print("===============================")
        func()
        print("===============================")
    return wrap

def print_text():
    print("Who\s your NFL Quarterback? ")

decorated = decor(print_text)
decorated()

team= input(" Enter your teams name here:").lower()

if team == "cowboys":
    print (Cowboys.qb,Cowboys.num) 
elif team == "niners":
    print (Niners.qb,Niners.num)

一个好的选择是使用字典来引用
足球的每个实例,这将避免在末尾出现大量
if
elif
结构:

class football:
    def __init__(self,qb,num):
        self.qb = qb
        self.num = num

    def __str__(self):
        return self.qb + ", " + self.num
teams = {
"Niners" : football("Gabbert", "02" ),
"Bears" : football("CUTLER, JAY","06"),
"Bengals" : football ("Dalton, Andy","14"),
"Bills" : football (" Taylor, Tyrod", "05")} #etc
#I didn't include the whole dictionary for brevity's sake

def decor(func):
    def wrap():
        print("===============================")
        func()
        print("===============================")
    return wrap

def print_text():
    print("Who\s your NFL Quarterback? ")

decorated = decor(print_text)
decorated()

team = input("Enter your teams name here:").capitalize()
print(teams[team])
您将注意到,这些球队现在位于一个字典中,因此可以通过使用球队名称索引字典来轻松访问每个球队的
football
实例。这是在最后一行执行的语句
print(teams[team])

team[team]
返回与存储在
team
中的密钥相关联的值。例如,如果用户输入
Chiefs
,字符串
'Chiefs'
将存储在
团队中。然后,当您尝试使用
teams[team]
为词典编制索引时,它将访问
'Chiefs'
的词典条目

但是请注意,从
teams[team]
返回的是
football
对象。通常,当你只是打印一个对象时,它会打印一些看起来有点像正在发生的事情的东西,因为它只是简单地打印一些关于对象的原始信息。让它返回您希望它返回的方法是在类中定义一个
\uuu repr\uuu
\uu str\uuu
方法(有关该方法的更多信息)。这正是我在
football
类中所做的,因此当打印类的实例时,它将以所需的格式打印所需的信息


另一种方法是完全取消该类,只需使用一个字典,其值是元组,其中包含四分卫的名称及其数字作为元素。代码看起来有点像这样:

teams = {
"Niners" : ("Gabbert", "02" ),
"Bears" : ("CUTLER, JAY","06"),
"Bengals" : ("Dalton, Andy","14"),
"Bills" : (" Taylor, Tyrod", "05")} #etc
# Again, not including the whole dictionary for brevity's sake

def decor(func):
    def wrap():
        print("===============================")
        func()
        print("===============================")
    return wrap

def print_text():
    print("Who\s your NFL Quarterback? ")

decorated = decor(print_text)
decorated()

team = input("Enter your teams name here:").capitalize()
print(teams[team][0], teams[team][1])
这次
teams[team]
是一个元组。最后一行是打印第一个元素(四分卫的名字),然后是第二个元素(数字)


第二个更干净,需要更少的代码,但这确实是个人偏好的问题

中有更多关于词典的信息


此外,为了简洁起见,我缩短了代码示例,但是您可以在上看到完整的代码示例

我认为字典是一种更合适的数据结构。好的,我会仔细阅读我说的那些对所有这些都很陌生的东西。事实上,这是我制作的第一个小程序。我想这个问题会更适合哦,哇,非常感谢Xamuel Schulman,我真的很感激它,而且信息非常丰富。我在读这篇文章之前开始做第二个,但没有意识到我可以把它们放在()中,尽管它们必须放在[]中再次感谢您,这绝对是我一直在寻找的。是的,我是这个网站/应用程序的新用户,我是否可以通过查看left@JesseHinojosa对非常感谢你。