【问题标题】:Tying values to keys in a dictionary and then printing将值绑定到字典中的键,然后打印
【发布时间】:2016-07-12 12:33:26
【问题描述】:

这是我一直在编写的主要代码的一小部分。根据用户选择,他们可以添加播放器信息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

【问题讨论】:

  • 在你的打印函数中,在每个键值对之间添加'\n'

标签: python dictionary printing storing-data


【解决方案1】:

我会在您的代码中更改一些内容,但要保持与您要求的内容接近,请查看以下内容:

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

多行打印会给您想要的结果。正如 cmets 中所述,这也可以通过单个 print() 语句来完成,但我认为紧凑的代码对您没有太大的影响。

此外,这条len(self.player_roster) == [] 行没有意义。这就像在一行中简单地写 True 一样好。团队的“空虚”由else:检查。

最后,我会稍微改变一下球员在“名册”字典中的存储方式,如下所示:{"Toby": ['444-4444', 3], ...}

【讨论】:

    【解决方案2】:

    我建议您将打印语句替换为:

    print(" Name: %s \n Phone Number: %s \n Jersey Number: %d") % player_roster[x]
    

    【讨论】:

      【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 2019-11-04
        • 2011-03-08
        • 2011-11-04
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        • 2021-08-14
        相关资源
        最近更新 更多