2017-03-07 51 views
-5

我對Python和任何語言都很陌生。我在一週前開始學習。我正在努力創建這個計算程序,它可以爲你計算GPA,只需將你的字母分數放入即可。這一切都很順利,直到出現錯誤時才結束。我會告訴你的錯誤我可以在if語句中命名變量嗎? Python

這是代碼,錯誤消息將顯示在底部。

$def grades(grades_combined): 
    print "This program will tell you what your total GPA for the semester is." 
    print "Just enter your grades, and Voila!" 

a_1 = 4.4 
a = 4.0 
a_2 = 3.6 
b_1 = 3.4 
b = 3.0 
b_2 = 2.6 
c_1 = 2.4 
c = 2 
c_2 = 1.6 
d_1 = 1.4 
d = 1 
d_2 = 0.6 
f = 0 

print """We are going to ask you for all letter grades, in any order. Please 
put the letter first, and then the symbol (if any). If there are non-applicable 
grades (such as those not entered), just click return.""" 
print "Press return to continue" 
raw_input("Continue!") 

grade_1 = raw_input("Grade #1: ") 
grade_2 = raw_input("Grade #2: ") 
grade_3 = raw_input("Grade #3: ") 
grade_4 = raw_input("Grade #4: ") 
grade_5 = raw_input("Grade #5: ") 
grade_6 = raw_input("Grade #6: ") 
grade_7 = raw_input("Grade #7: ") 
grade_8 = raw_input("Grade #8: ") 


if grade_1 == "a+": 
    grade_1_no = a_1 
elif grade_1 == "a": 
    grade_1_no = a 
elif grade_1 == "a-": 
    grade_1_no = a_2 
elif grade_1 == "b+": 
    grade_1_no = b_1 
elif grade_1 == "b": 
    grade_1_no = b 
elif grade_1 == "b-": 
    grade_1_no = b2 
elif grade_1 == "c+": 
    grade_1_no = c_1 
elif grade_1 == "c": 
    grade_1_no = c 
elif grade_1 == "c-": 
    grade_1_no = c_2 
elif grade_1 == "d+": 
    grade_1_no = d_1 
elif grade_1 == "d": 
    grade_1_no = d 
elif grade_1 == "d-": 
    grade_1_no = d_2 
elif grade_1 == "f": 
    grade_1_no = f 

    if grade_8 == "a+": 
    grade_8_no = a_1 
    elif grade_8 == "a": 
    grade_8_no = a 
    elif grade_8 == "a-": 
    grade_8_no = a_2 
    elif grade_8 == "b+": 
    grade_8_no = b_1 
    elif grade_8 == "b": 
    grade_8_no = b 
    elif grade_8 == "b-": 
    grade_8_no = b_2 
    elif grade_8 == "c+": 
    grade_8_no = c_1 
    elif grade_8 == "c": 
    grade_8_no = c 
    elif grade_8 == "c-": 
    grade_8_no = c_2 
    elif grade_8 == "d+": 
    grade_8_no = d_1 
    elif grade_8 == "d": 
    grade_8_no = d 
    elif grade_8 == "d-": 
    grade_8_no = d_2 
    elif grade_8 == "f": 
    grade_8_no = f 

    if grade_2 == "a+": 
     grade_2_no = a_1 
    elif grade_2 == "a": 
     grade_2_no = a 
    elif grade_2 == "a-": 
     grade_2_no = a_2 
    elif grade_2 == "b+": 
     grade_2_no = b_1 
    elif grade_2 == "b": 
     grade_2_no = b 
    elif grade_2 == "b-": 
     grade_2_no = b_2 
    elif grade_2 == "c+": 
     grade_2_no = c_1 
    elif grade_2 == "c": 
     grade_2_no = c 
    elif grade_2 == "c-": 
     grade_2_no = c_2 
    elif grade_2 == "d+": 
     grade_2_no = d_1 
    elif grade_2 == "d": 
     grade_2_no = d 
    elif grade_2 == "d-": 
     grade_2_no = d_2 
    elif grade_2 == "f": 
     grade_2_no = f 

     if grade_3 == "a+": 
     grade_3_no = a1 
     elif grade_3 == "a": 
     grade_3_no = a 
     elif grade_3 == "a-": 
     grade_3_no = a_2 
     elif grade_3 == "b+": 
     grade_3_no = b_1 
     elif grade_3 == "b": 
     grade_3_no = b 
     elif grade_3 == "b-": 
     grade_3_no = b_2 
     elif grade_3 == "c+": 
     grade_3_no = c_1 
     elif grade_3 == "c": 
     grade_3_no = c 
     elif grade_3 == "c-": 
     grade_3_no = c_2 
     elif grade_3 == "d+": 
     grade_3_no = d_1 
     elif grade_3 == "d": 
     grade_3_no = d 
     elif grade_3 == "d-": 
     grade_3_no = d_2 
     elif grade_3 == "f": 
     grade_3_no = f 

     if grade_4 == "a+": 
      grade_4_no = a_1 
     elif grade_4 == "a": 
      grade_4_no = a 
     elif grade_4 == "a-": 
      grade_4_no = a_2 
     elif grade_4 == "b+": 
      grade_4_no = b_1 
     elif grade_4 == "b": 
      grade_4_no = b 
     elif grade_4 == "b-": 
      grade_4_no = b_2 
     elif grade_4 == "c+": 
      grade_4_no = c_1 
     elif grade_4 == "c": 
      grade_4_no = c 
     elif grade_4 == "c-": 
      grade_4_no = c_2 
     elif grade_4 == "d+": 
      grade_4_no = d_1 
     elif grade_4 == "d": 
      grade_4_no = d 
     elif grade_4 == "d-": 
      grade_4_no = d_2 
     elif grade_4 == "f": 
      grade_4_no = f 

      if grade_5 == "a+": 
      grade_5_no = a_1 
      elif grade_5 == "a": 
      grade_5_no = a 
      elif grade_5 == "a-": 
      grade_5_no = a_2 
      elif grade_5 == "b+": 
      grade_5_no = b_1 
      elif grade_5 == "b": 
      grade_5_no = b 
      elif grade_5 == "b-": 
      grade_5_no = b_2 
      elif grade_5 == "c+": 
      grade_5_no = c_1 
      elif grade_5 == "c": 
      grade_5_no = c 
      elif grade_5 == "c-": 
      grade_5_no = c2 
      elif grade_5 == "d+": 
      grade_5_no = d1 
      elif grade_5 == "d": 
      grade_5_no = d 
      elif grade_5 == "d-": 
      grade_5_no = d2 
      elif grade_5 == "f": 
      grade_5_no = f 

      if grade_6 == "a+": 
       grade_6_no = a_1 
      elif grade_6 == "a": 
       grade_6_no = a 
      elif grade_6 == "a-": 
       grade_6_no = a_2 
      elif grade_6 == "b+": 
       grade_6_no = b_1 
      elif grade_6 == "b": 
       grade_6_no = b 
      elif grade_6 == "b-": 
       grade_6_no = b_2 
      elif grade_6 == "c+": 
       grade_6_no = c_1 
      elif grade_6 == "c": 
       grade_6_no = c 
      elif grade_6 == "c-": 
       grade_6_no = c_2 
      elif grade_6 == "d+": 
       grade_6_no = d_1 
      elif grade_6 == "d": 
       grade_6_no = d 
      elif grade_6 == "d-": 
       grade_6_no = d_2 
      elif grade_6 == "f": 
       grade_6_no = f 

       if grade_7 == "a+": 
       grade_7_no = a_1 
       elif grade_7 == "a": 
       grade_7_no = a 
       elif grade_7 == "a-": 
       grade_7_no = a_2 
       elif grade_7 == "b+": 
       grade_7_no = b_1 
       elif grade_7 == "b": 
       grade_7_no = b 
       elif grade_7 == "b-": 
       grade_7_no = b_2 
       elif grade_7 == "c+": 
       grade_7_no = c_1 
       elif grade_7 == "c": 
       grade_7_no = c 
       elif grade_7 == "c-": 
       grade_7_no = c_2 
       elif grade_7 == "d+": 
       grade_7_no = d_1 
       elif grade_7 == "d": 
       grade_7_no = d 
       elif grade_7 == "d-": 
       grade_7_no = d_2 
       elif grade_7 == "f": 
       grade_7_no = f 


grades_combined = ((grade_1_no + grade_2_no + grade_3_no + grade_4_no + grade_5_no, 
+ grade_6_no + grade_7_no + grade_8_no)/8) 
print "Your total GPA is %r" % grades_combined $ 

這是錯誤

Traceback (most recent call last): File "STUDY19", line 252, in <module> grades_combined = ((grade_1_no + grade_2_no + grade_3_no + grade_4_no + grade_5_no, NameError: name 'grade_2_no' is not defined $

請幫助非常感謝!

+0

的變量僅在範圍上的if語句。真的應該有更好的方法來做到這一點,而不是一噸ifs和其他ifs ... – Li357

+0

閱讀關於[MCVE]的M(http://stackoverflow.com/help/mcve)。 –

+0

查看使用字典將字符串(例如「a +」)映射到值(例如4.4) –

回答

3

試試這個。閱讀代碼,試着瞭解我在做什麼。閱讀Python中的列表和字典。關於理解。還有關於循環。

#!/usr/bin/env python 

def grade_set(c): 
    i = ord('d') - ord(c) + 1.0 
    return [ (c + '+', i+0.4), (c, i), (c + '-', i-0.4) ] 

GRADES_NUMBERS = dict(sum([ grade_set(c) for c in 'abcd' ], [])) 
GRADES_NUMBERS['f'] = 0.0 

grades = [ None ] * 8 
for i in range(len(grades)): 
    while True: # until grade is valid 
    grades[i] = raw_input("Grade #%d: " % (i+1)) 
    if grades[i] in GRADES_NUMBERS: 
     break 
    print "This is no valid grade, please repeat." 

grades_numbers = [ GRADES_NUMBERS[grade] for grade in grades ] 

grades_combined = sum(grades_numbers)/len(grades_numbers) 

print "Your total GPA is", grades_combined 

計算機的主要思想是讓計算機做重複的任務,而不是程序員。所以只要你在編程時重複自己,你做錯了什麼。這在編程界是如此的深刻,以至於他們甚至有一個縮寫:幹 - 不要重複自己。

0

從我所看到的,你所要做的就是在啓動程序之前創建變量名稱。因此,在您定義程序之前,只需初始化變量即可。

grade_no_1 = '' 
grade_no_2 = '' 
>>> 
grade_no_8 = '' 
0

這是不工作的原因是因爲你的變量不與else範圍之外存在。看看這個例子

x = 1 
z = 0 
if x < 0: 
    y = 2 
else: 
    z = x + y # this will fail because y does not exist in a place that can be accessed 

如果你這樣做,它的工作:

x = 1 
y = 0 
z = 0 
if x < 0: 
    y = 2 
else: 
    z = x + y 

另外,我建議你看一看dictionariesmaps,大大提高了代碼的可讀性。

0

非常感謝,這擺脫了我的問題,但創造了另一個。我不知道這個錯誤是什麼意思,我認爲它與字符串中的正面符號有關。我對這些愚蠢的問題抱歉,因爲我說我剛剛開始,我只有14

Traceback (most recent call last): File "STUDY19.py", line 261, in <module> + grade_6_no + grade_7_no + grade_8_no)/8) TypeError: bad operand type for unary +: 'str'

相關問題