2016-07-12 5 views
0

Это небольшая часть основного кода, который я пишу. В зависимости от выбора пользователя они могут добавлять информацию о игроке, а затем распечатывать информацию из списка игроков словаря. Я хочу хранить информацию, а затем печатать в этом формате, но я не мог понять, как это сделать. Имя **** Номер телефона **** Номер Джерси **** Im новый для словарей, но я потратил часы на чтение и поиск за последние пару дней о словарях и попробовал несколько разных способов сделать это но не удалось. Я получил самый близкий путь, который у меня есть сейчас, но он все еще не работает правильно. Мне кажется, что я неправильно храню информацию в словаре для начинающих, любая помощь будет очень признательна.Связывание значений с ключами в словаре, а затем печать

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 
+0

В функции печати, добавьте «\ п» между каждой парой ключ-значение –

ответ

0

Вы в значительной степени находитесь там. Ниже модификация позволит вам печатать, как вам нужно (и немного более читаемым):

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() 

Чуть более ремонтопригодны решением было бы создать класс для игрока. Задайте свойства объекта и перегрузите функцию 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) 
0

Я бы предложил заменить оператор печати на это:

print(" Name: %s \n Phone Number: %s \n Jersey Number: %d") % player_roster[x] 
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 

Печать в нескольких строках дает вам результат, который вы хотите. Как указано в комментариях, это также можно сделать с помощью одного заявления print(), но я не думаю, что компактный код имеет для вас большое значение.

Далее, это len(self.player_roster) == [] линия не имеет смысла. Это так же хорошо, как просто написать True в строке. «Пустота» команды проверяется else:.

Наконец, я бы немного изменить способ игроки хранимую в словаре «Учетный» и есть это так: {"Toby": ['444-4444', 3], ...}