2017-03-07 52 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'

相关问题