2017-11-20 18 views
2

Ich versuche, Code zu schreiben, der die Anzahl der Personen an einer Veranstaltung sammeln wird. Basierend auf der Anzahl der Personen werde ich oft a) nach dem Namen der Person fragen, b) nach der Anzahl der gespendeten Spielsachen. Ich möchte, dass die Information in ein Wörterbuch eingegeben wird, das ich an eine andere Funktion weitergeben werde. Die zweite Funktion wird Personen auswählen, die mehr als 20 Spielzeuge gespendet haben und ihren Namen und die Anzahl der Spielzeuge, die gespendet wurden, als "Level 1" und dann alle anderen als "Level 2" ausdrucken.Python Drucken aus dem Wörterbuch

Ich habe überprüft, um sicherzustellen, dass die Daten korrekt von einer Funktion an eine andere weitergegeben werden. Ich habe Probleme, den Spendenbetrag ohne die [] zu drucken. Außerdem wird die Ebene über jedem Eintrag gedruckt, anstatt die Einträge unterhalb der Ebene aufzulisten. Mit anderen Worten, ich versuche zu bekommen:

Stufe 1
Selena Gomez 50
40 Beyonce

Stufe 2
Will Smith 5

Was mache ich falsch ?

ist hier mein Code:

def data(): 
    people = int(input("How many individuals are attending? ")) 
    attendees = {} 
    for i in range(people): 
     name = str(input('Please enter name: ')) 
     amount = int(input('Number of toys donated:')) 
     attendees[name]= [amount] 

    return attendees 




def print_data(): 
    attendees = data() 

    for i in attendees: 
     if attendees[i][0] > 20: 
      print('Level 1') 
      print(i, attendees[i]) 

     else:  
      print('Level 2') 
      print(i, attendees[i]) 

print_data() 

Und hier ist meine Ausgabe:

Wie viele Personen teilnehmen? 3

Bitte geben Sie Name: Will Smith

Anzahl von Spielzeug gespendet: 5

Bitte geben Sie Name: Selena Gomez

Anzahl von Spielzeug gespendet: 50

Bitte geben Sie Name: Beyonce

Anzahl der gespendeten Spielzeuge: 40

Stufe 2
Will Smith [5]

Stufe 1
Selena Gomez [50]

Stufe 1
Beyonce [40]

+2

Entfernen Sie einfach die Klammern hier: 'Teilnehmer [Name] = [Menge]' sollte 'Teilnehmer [Name] = Menge' sein sonst speichern Sie eine Liste im Wörterbuch. Aus diesem Grund werden die Klammern in der Ausgabe angezeigt. – Igle

+0

Warum fügen Sie die Klammern an erster Stelle hinzu? – quamrana

Antwort

1

Sie haben zwei Fehler gemacht, Sie nahmen die Eingabe als Liste ein s-Wert jedes Wörterbuch Element und Sie haben zwei verschiedene Loops laufen die alle Werte größer als 20 und eine andere zu finden, um die Werte zu drucken weniger als 20

def data(): 
    people = int(input("How many individuals are attending? ")) 
    attendees1 = {} 
    attendees2 = {} 
    for i in range(people): 
     name = str(input('Please enter name: ')) 
     amount = int(input('Number of toys donated:')) 
     #amount should be just a variable not list 
     if amount > 20: 
      attendees1[name]= amount 
     else: 
      attendees2[name] = amount 

    return attendees1, attendees2 




def print_data(): 
    attendees1, attendees2 = data() 


    if len(attendees1) > 0: 
     print('Level 1') 
     for i in attendees1: 
      print(i, attendees1[i]) 

    if len(attendees2) > 0: 
     print('Level 2') 
     for i in attendees2: 
      print(i, attendees2[i]) 

print_data() 
+1

Danke. Kannst du vorschlagen, wie ich die Level-Nummer nur einmal mit den entsprechenden Elementen darunter erscheinen lasse? Es wird immer noch die Ebene über JEDEM Element gedruckt. – kiki1113

+0

Entschuldigung mein schlechtes, aktualisierte den Code, jetzt sehe es, nur das level1,2 einmal außerhalb der Schleife druckend –

+0

Danke -perfect. Jetzt muss ich herausfinden, wie diese Ebenen nicht gedruckt werden können, wenn keine Elemente in diese Kategorien fallen. – kiki1113

0

Diese beiden Zeilen bearbeitet werden sollen:

attendees[name]= [amount] 
#into 
attendees[name]= amount 
#and 
if attendees[i][0] > 20: 
#into 
if attendees[i] > 20: 
+0

Danke, zipa. Dies adressiert das [] Problem, aber irgendwelche Gedanken darüber, wie ich die Level-Nummer nur einmal mit den entsprechenden Elementen darunter erscheinen lasse? Es wird immer noch die Ebene über JEDEM Element gedruckt. – kiki1113

0

Hat etwas wie diese Arbeit für Sie?

def data(): 
    people = int(input("How many individuals are attending? ")) 
    attendees = {} 
    for i in range(people): 
     name = str(input('Please enter name: ')) 
     amount = int(input('Number of toys donated:')) 
     attendees[name]= amount 
    return attendees 


def print_data(attendees): 
    level_one = [] 
    level_two = [] 
    for name, count in attendees.items(): 
     if count >= 20: 
      level_one.append((name, count)) 
     else: 
      level_two.append((name, count)) 

    print('Level 1') 
    for name, count in level_one: 
     print(name, count) 

    print('\nlevel 2') 
    for name, count in level_two: 
     print(name, count) 


attendees = data() 
print_data(attendees) 
Verwandte Themen