2016-07-12 12 views
0

Dies ist ein kleinerer Teil des Hauptcodes, den ich geschrieben habe. Abhängig von der Benutzerauswahl können sie Spielerinformationen hinzufügen und dann die Informationen aus dem Verzeichnis des Wörterbuchspielers ausdrucken. Ich möchte die Informationen speichern und dann in diesem Format drucken, aber ich konnte nicht herausfinden, wie das geht. Name **** Telefonnummer **** Jersey Nummer **** Ich bin neu bei den Wörterbüchern, aber ich habe in den letzten Tagen Stunden damit verbracht, über Wörterbücher zu lesen und zu suchen, und habe verschiedene Möglichkeiten ausprobiert aber scheiterte. Ich habe es am ehesten so eingerichtet wie jetzt, aber es funktioniert immer noch nicht richtig. Ich fühle mich, als würde ich die Informationen für Anfänger in das Wörterbuch falsch speichern, jede Hilfe würde sehr geschätzt werden.Verknüpfen von Werten mit Schlüsseln in einem Wörterbuch und Drucken

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

In Ihrer Druckfunktion, fügen Sie ‚\ n‘ zwischen den einzelnen Schlüssel-Wert-Paar –

Antwort

0

Sie sind ziemlich viel da. Die unten Änderung würde ermöglichen es Ihnen, wie Sie drucken müssen (und ist etwas besser lesbar):

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

Eine etwas wartbare Lösung wäre, eine Klasse für Spieler zu schaffen. Legen Sie die Eigenschaften für das Objekt fest und überlasten Sie die Funktion str, z.

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

Ich würde vorschlagen, dass Sie die print-Anweisung dazu ersetzen:

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

Es gibt einige Dinge, die ich in Ihrem Code ändern würde, aber so nahe an zu halten, was Sie gebeten, für einen Blick auf dies:

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 

Drucken in mehreren Zeilen gibt Ihnen das gewünschte Ergebnis. Wie in den Kommentaren gesagt, kann dies auch mit einer einzigen print() Anweisung getan werden, aber ich denke nicht, dass kompakter Code für Sie noch viel Unterschied macht.

Weiter macht diese len(self.player_roster) == [] Zeile keinen Sinn. Dies ist so gut wie einfach True in einer Zeile schreiben. Die "Leere" des Teams wird von der else: überprüft.

Schließlich würde ich leicht die Art und Weise ändern Spieler in der „Roster“ Wörterbuch gespeichert sind, und haben es wie folgt aus: {"Toby": ['444-4444', 3], ...}