平均

2016-11-02 9 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

"入力" メソッドの2番目の最後の行は、文字列のみを返します。整数を返すには、 "int(input(prompt))" –

答えて

1

あなたは、whileループをmodyfing、そしてそのない終了文字列の場合はチェックした後、フロートへのユーザ入力を変換することによって、あなたの問題を解決することができます:

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) 

注意を。あなたのユーザーが 'quit'という他の文字列を提供している場合、プログラムは失敗します。だから、これを拡張して、グレードリストに追加する前に、ユーザー入力が数字であることを確認することができます。

0

あなたの問題は、数字の代わりにあなたのリストにあなたの追加文字列があることです。リストに追加する前に、ユーザー入力を整数にキャストする必要があります。あなたはそれがあるように、あなたのgradesリストに追加する前に、文字列"quit"に等しいかどうかを確認するために、ユーザーの入力をチェックする必要があり、また

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

:あなたは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: 
    grade = input("Enter a grade: ") 
    if grade == "quit": 
     average = sum(grades)/len(grades) 
     print(name1, name2, average) 
     break 
    grades.append(int(grade)) 

変更:

  • を私はしばらくの間、真の代わりwhilを使用あなたのwhileループとifステートメントでユーザー入力をテストする必要がないためです。
  • gradesリストにユーザー入力を追加する前に、ユーザーが終了するかどうかを確認するためのチェックを追加しました。
  • ユーザー入力を整数にキャストしてから、gradesリストに追加します。
0

変更

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