2016-11-02 7 views
1
name1 = input("Please enter in your first name :") 
name2 = input("Please enter in your last name :") 
prompt = "Please enter in your grades. When you are finished, enter 'quit': " 
grades = [] 
grades2 = (input(prompt).strip()) 
length = len(grades) 

while (grades2 != "quit"): 
    grades.append(grades2) 
    grades2 = input(prompt).strip() 

if (grades2 == "quit"): 
    average = float(sum(grades)/len(grades)) 
    print (name1, name2, average)  

So erhalte Ich versuche, das Programm druckt mich um einen Durchschnitt zu machen, und ich diesen Fehler:Durchschnitt einer Liste

Traceback (most recent call last): 
    File "C:/Users/Owner/AppData/Local/Programs/Python/Python35/Project.py",  line  13, in <module> 
      average = float(sum(grades)/len(grades)) 
     TypeError: unsupported operand type(s) for +: 'int' and 'str' 

Hilfe!

name1 = input("Please enter in your first name: ") 
name2 = input("Please enter in your last name: ") 
prompt = "Please enter in your grades. When you are finished, enter 'quit': " 

grades = [] 

while True: 
    an_input = input(prompt).strip() 
    if an_input == 'quit': 
     break   
    grades.append(float(an_input)) 

average = sum(grades)/len(grades) 
print(name1, name2, average) 

Hinweis:

+0

"input" Methode gibt nur Strings. Wenn Sie wollen, dass ganze Zahlen zurückgegeben werden, verwenden Sie "int (Eingabe (Eingabeaufforderung))" –

Antwort

1

Sie können Ihr Problem durch Modyfing die while-Schleife und Konvertieren von Benutzereingaben an Schwimmern, nach der Überprüfung, ob es nicht eine Zeichenfolge beenden lösen. Wenn Ihre Benutzer eine andere Zeichenfolge angeben, die "beendet", schlägt das Programm fehl. Vielleicht möchten Sie dies erweitern, um sicherzustellen, dass die Benutzereingabe die Nummer ist, bevor Sie sie an die Notenliste anhängen.

0

Ihr Problem ist, dass Sie die Zeichenfolgen an Ihre Liste anhängen, anstatt an Zahlen. Sie müssen Ihre Benutzereingabe in eine Ganzzahl umwandeln, bevor Sie sie an Ihre Liste anhängen. Sie können bei jeder Iteration der while-Schleife durch den Druck Ihre Liste sehen:

Please enter in your first name :dummy 
Please enter in your last name :name 
Please enter in your grades. When you are finished, enter 'quit': 1 
[] 
Please enter in your grades. When you are finished, enter 'quit': 2 
['1'] 
Please enter in your grades. When you are finished, enter 'quit': 3 
['1', '2'] 
Please enter in your grades. When you are finished, enter 'quit': 4 
['1', '2', '3'] 
Please enter in your grades. When you are finished, enter 'quit': 5 
['1', '2', '3', '4'] 
Please enter in your grades. When you are finished, enter 'quit': 6 
['1', '2', '3', '4', '5'] 
Please enter in your grades. When you are finished, enter 'quit': 

Außerdem sollen Sie Ihre Benutzereingabe überprüfen, um zu sehen, ob es die Zeichenfolge "quit" gleich, bevor sie an Ihre grades Liste angehängt, so dass es nicht an die Liste angehängt:

name1 = input("Please enter in your first name :") 
name2 = input("Please enter in your last name :") 
prompt = "Please enter in your grades. When you are finished, enter 'quit': " 
grades = [] 

while True: 
    grade = input("Enter a grade: ") 
    if grade == "quit": 
     average = sum(grades)/len(grades) 
     print(name1, name2, average) 
     break 
    grades.append(int(grade)) 

Änderungen:

  • ich eine Weile wahr anstelle eines whil verwendet Eine Bedingung, da Sie Ihre Benutzereingaben weder in Ihrer while-Schleife noch in Ihrer if-Anweisung testen müssen.
  • Ich fügte die Prüfung hinzu, um festzustellen, ob der Benutzer beendet wird, bevor Sie die Benutzereingabe an Ihre grades-Liste anfügen.
  • Ich werfe die Benutzereingabe auf eine Ganzzahl, bevor Sie es an Ihre grades Liste anfügen.
0

Ändern der zweite letzte Zeile

average = float(sum([float(i) for i in grades])/len(grades)) 
Verwandte Themen