2016-11-02 146 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)  

的所以我想使程序打印我的平均值,我得到這個錯誤:平均列表

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' 

幫助!

+0

「輸入」 方法只返回字符串。如果你想讓它返回整數,使用「int(input(prompt))」 –

回答

1

您可以通過modyfing while循環和轉換用戶輸入的花車,如果它不是一個退出字符串檢查後解決您的問題:

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) 

注意。如果您的用戶提供其他字符串「退出」,程序將失敗。因此,您可能希望擴展到此,以確保用戶輸入是數字,然後再將其附加到成績列表中。

0

你的問題是你的附加字符串到你的列表,而不是數字。您需要在將用戶輸入附加到列表之前將其轉換爲整數。您可以通過打印在while循環的每一次迭代的列表中看到這一點:

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': 

此外,你應該檢查你的用戶輸入,看它是否追加到您的grades列表中,這樣它纔等於字符串"quit"不附加到列表:

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

變化:

  • 我用得到控制而的同時,真正代替因爲不需要在while循環中測試用戶輸入以及if語句。
  • 我添加了檢查,看看用戶在將用戶輸入附加到grades列表之前是否退出。
  • 我在將用戶輸入附加到您的grades列表之前將其轉換爲整數。
0

更改所述第二最後一行

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