[英]Tying values to keys in a dictionary and then printing
这是我编写的主要代码的一小部分。 根据用户的选择,他们可以添加播放器信息a,然后从字典播放器名册中打印信息。 我想存储信息,然后以这种格式打印,但是我无法弄清楚该怎么做。 姓名****电话号码****泽西岛号码****我是词典的新手,但过去几天我花了数小时阅读和搜索有关词典的信息,并尝试了几种不同的方法来完成此操作但失败了。 我已经以现在的方式获得了最接近的设置,但仍然无法正常工作。 我觉得我将信息错误地存储在字典中供初学者使用,对您的帮助将不胜感激。
player_roster = {}
def display_roster(self): #Print Roster
if len(player_roster) != 0:
for x in player_roster.keys():
print('Name:', x, 'Phone Number:', player_roster[x])
else: #Print No One on Roster
len(player_roster) == []
print('No names have been entered:')
def add_player(self,): #Enter Members Name
name = input('Enter New Players Name:')
phone_number = input('Enter Players Phone Number:')
jersey_number = int(input('Enter Players Jersey Number'))
player_roster[name] = phone_number, 'Jersey Number', jersey_number
#If I input Toby as Name 444-444 as Phone Number and 3 as Jersey number it outputs like this
Name: Toby Phone Number: ('444-4444', 'Jersey Number', 3)
# I would like it to output like
Name: Toby
Phone Number: 444-4444
Jersey Number: 3
有一些事情我会在您的代码中进行更改,但为了使其与您的要求保持一致,请看一下以下内容:
def display_roster():
if len(player_roster) != 0:
for x in player_roster.keys():
print('Name:', x)
print('Phone Number:', player_roster[x][0])
print('Jersey Number:', player_roster[x][1])
else:
print('Roster is empty.')
return
player_roster = {}
def add_player():
name = input('Enter New Players Name:\t')
phone_number = input('Enter Players Phone Number:\t')
jersey_number = int(input('Enter Players Jersey Number:\t'))
player_roster[name] = [phone_number, jersey_number]
return
add_player()
display_roster()
# PRINTS:
#Name: Toby
#Phone Number: 444-4444
#Jersey Number: 3
多行打印可为您提供所需的结果。 如评论中所述,这也可以使用单个print()
语句完成,但我认为紧凑的代码对您没有多大影响。
此外,此len(self.player_roster) == []
行没有意义。 这与简单地在一行中编写True
一样好。 团队的“空虚”由else:
检查else:
。
最后,我会稍微改变玩家在“ Roster”字典中的存储方式,并使其如下: {"Toby": ['444-4444', 3], ...}
你几乎在那里。 下面的修改将允许您根据需要进行打印(并且可读性更高):
class PlayerDictionary():
def __init__(self):
pass
player_roster = {}
def display_roster(self): #Print Roster
if len(self.player_roster) != 0:
for key, value in self.player_roster.iteritems():
print(str(key) + ": " + str(value))
else: #Print No One on Roster
len(self.player_roster) == []
print('No names have been entered:')
def add_player(self,):
self.player_roster['Name'] = input('Enter New Players Name:')
self.player_roster['Phone Number'] = input('Enter Players Phone Number:')
self.player_roster['Jersey Number'] = int(input('Enter Players Jersey Number'))
if __name__ == "__main__":
player = PlayerDictionary()
player.add_player()
player.display_roster()
一个稍微更可维护的解决方案是为Player创建一个类。 在对象上设置属性并重载str函数,例如
class Player(object):
def __init__(self):
self.__name = ""
self.__phone_number = ""
self.__jersey_number = ""
@property
def name(self):
return self.__name
@property
def phone_number(self):
return self.__phone_number
@property
def jersey_number(self):
return self.__jersey_number
@name.setter
def name(self, val):
self.__name = val
@phone_number.setter
def phone_number(self, val):
self.__phone_number = val
@jersey_number.setter
def jersey_number(self, val):
self.__jersey_number = val
def __str__(self):
return ("Name: %s\nPhone Number: %s\nJersey Number: %s" % (str(self.__name), str(self.__phone_number), str(self.__jersey_number)))
if __name__ == "__main__":
player = Player()
player.name = input('Enter New Players Name:')
player.phone_number = input('Enter Players Phone Number:')
player.jersey_number = int(input('Enter Players Jersey Number'))
print(player)
我建议您将打印语句替换为:
print(" Name: %s \n Phone Number: %s \n Jersey Number: %d") % player_roster[x]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.