2017-03-03 23 views
0

この質問は何度も尋ねられていますが、私のコードではまだ問題が見つかりません。私のプログラムは等級計算機です。ここでTypeError: 'float型'の非整数でシーケンスを掛けることができません - floatに変換した後

Traceback (most recent call last): 
    File "/Users/Jeremy/Documents/Python Projects/Mosier_Jeremy_HW4.py", line 59, in <module> 
    main() 
    File "/Users/Jeremy/Documents/Python Projects/Mosier_Jeremy_HW4.py", line 53, in main 
    total = calcTotal (entry_exam1, entry_exam2, entry_exam3, entry_hw, entry_lqr, entry_fp) 
    File "/Users/Jeremy/Documents/Python Projects/Mosier_Jeremy_HW4.py", line 29, in calcTotal 
    total = float ((exam1 * EXAM1_WEIGHT) + (exam2 * EXAM2_WEIGHT) + (exam3 * EXAM3_WEIGHT) + (hw * HW_WEIGHT) + (lqr * LQR_WEIGHT) + (fp * FP_WEIGHT)) 
TypeError: can't multiply sequence by non-int of type 'float' 

が私のコードです:私はこのエラーが発生した成績を入力した後

EXAM1_WEIGHT = .2 
EXAM2_WEIGHT = .2 
EXAM3_WEIGHT = .2 
HW_WEIGHT = .2 
LQR_WEIGHT = .1 
FP_WEIGHT = .1 

def entry_validation (assignment) : 
    entry = -1 

    while entry == -1: 
     entry = input ('What was your final score for ' + assignment + '? ') 

     if entry == '': 
      entry = -1 
      print ('ERROR: You cannot leave this field blank. Please try again.') 

     else: 
      entry = float (entry) 

      if entry < 0 or entry > 100: 
       entry = -1 
       print ('ERROR: You score must be between 0 and 100. Please try again.') 

    return assignment 


def calcTotal (exam1, exam2, exam3, hw, lqr, fp) : 
    total = float ((exam1 * EXAM1_WEIGHT) + (exam2 * EXAM2_WEIGHT) + (exam3 * EXAM3_WEIGHT) + (hw * HW_WEIGHT) + (lqr * LQR_WEIGHT) + (fp * FP_WEIGHT)) 

    return total 

def calcLetter (total) : 
    if total < 89.5: 
     return 'A' 
    elif total < 79.5: 
     return 'B' 
    elif total < 69.5: 
     return 'C' 
    elif total < 59.5: 
     return 'D' 
    else: 
     return 'F' 

def main() : 
    entry_exam1 = entry_validation ('Exam 1') 
    entry_exam2 = entry_validation ('Exam 2') 
    entry_exam3 = entry_validation ('Exam 3') 
    entry_hw = entry_validation ('Homework') 
    entry_lqr = entry_validation ('Language Quick Reference') 
    entry_fp = entry_validation ('Final Project') 

    total = calcTotal (entry_exam1, entry_exam2, entry_exam3, entry_hw, entry_lqr, entry_fp) 
    letter = calcLetter (total) 

    print ('Your total score is a(n): ', format (total, ',.2%')) 
    print ('Your final letter grade is a(n): ', letter) 

main() 

答えて

0

あなたのコードから私はあなたがentry_validationはfloatを返すようにしたいと仮定し、それが実際に文字列あなたを返しますそれを呼び出すときに提供する。例えば

、中:

entry_exam1 = entry_validation ('Exam 1') 

entry_validation ('Exam 1')文字列Exam 1を返します。文字列に任意の浮動小数点数を掛けようとすると、報告したTypeErrorが返されます。

それはfloatを返すようにあなたは、あなたにentry_validation機能を変更する必要があります:

def entry_validation (assignment) : 
    entry = -1 

    while entry == -1: 
     entry = input ('What was your final score for ' + assignment + '? ') 

     if entry == '': 
      entry = -1 
      print ('ERROR: You cannot leave this field blank. Please try again.') 

     else: 
      # Let's handle possible exceptions when the input cannot be converted 
      try: 
       entry = float (entry) 
       if entry < 0 or entry > 100: 
        entry = -1 
        print ('ERROR: You score must be between 0 and 100. Please try again.') 
       else: 
        return entry 
      except ValueError: 
       entry = -1 
       print("ERROR: Must be a float") 
+0

ありがとうございました!それが問題でした。プログラムはすぐにうまくいきます。 –

関連する問題