我对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)
答案 0 :(得分:0)
一个好的选择是使用字典来引用football
的每个实例,这样可以避免最后的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])
的最后一行上完成的。
teams[team]
返回与team
内存储的密钥关联的值。例如,如果用户输入Chiefs
,则字符'Chiefs'
将存储在team
中。然后,当您尝试使用teams[team]
索引字典时,它将访问'Chiefs'
的字典条目。
但请注意,teams[team]
返回的内容是football
个对象。通常情况下,当您打印一个对象时,它会打印出与here上的内容类似的内容,因为它只是打印一些有关该对象的原始信息。让它返回您想要的方法是在类中定义__repr__
或__str__
方法(有关该here的更多信息)。这正是我在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]
是一个元组。最后一行是打印第一个元素(四分卫的名字),然后是第二个元素(数字)。
第二个更干净,需要更少的代码,但这确实是个人偏好的问题。
docs中有关于词典的更多信息。
此外,为简洁起见,我缩短了代码示例,但您可以在pastebin上看到完整的代码示例。