为什么我的"总计"变量没有定义?

时间:2016-04-03 22:21:51

标签: python

我还是一个非常新的初学者,当涉及到python时,我的代码在尝试运行时给了我一个错误。它告诉我,总数没有定义。

def main():
    total = 0
    avg = 0
    abc_grade = 0

def calc_average(total):
    return total / 5

def letterGrade(grade):
    if 90 <= grade <= 100:
        return "A"
    elif 80 <= grade <= 89:
        return "B"
    elif 70 <= grade <= 79:
        return "C"
    elif 60 <= grade <= 69:
        return "D"
    else:

        return "F"

while(True):
    grade = int(input("Enter a Grade: "))
    total += grade
    avg = calc_average(total)
    abc_grade = letterGrade(grade)

    print("Average: " +str(avg))
    print("Grades: " +str(abc_grade))

main()

我认为通过给出&#34; total = 0&#34;在主要下将定义它。再次,我是一个初学者,所以任何帮助/解释都会很棒。

5 个答案:

答案 0 :(得分:2)

未在while循环所在的外部作用域中定义。您可以将while循环包装在函数中,然后从main调用它,或者将main替换为:

total = 0
avg = 0
abc_grade = 0

即。在全局范围内定义变量。

答案 1 :(得分:0)

首先调用你的while循环。

语句total += grade是错误发生的地方,因为total尚未初始化。在while循环之前添加total = 0

total = 0  #Defining total
while(True):
    grade = int(input("Enter a Grade: "))
    total += grade
    avg = calc_average(total)
    abc_grade = letterGrade(grade)

在旁注中,请注意while循环无限执行,main()不会被执行。

答案 2 :(得分:0)

所以你的程序流程如下所示:

虽然为True,但添加一些东西做一些平均并打印结果。然后运行主要方法。

Indention在python中是一个大问题,所以通过让你的while循环与Main()在同一个缩进中,你首先运行所有这些。因此,您的计划第一次看到总计是当您说总计+ =成绩

我怀疑你的意思是所有这一切,而逻辑是主要方法的一部分,看起来像这样:

def main():
    total = 0
    avg = 0
    abc_grade = 0
    input = 5
    while(input > 0):
        grade = int(input("Enter a Grade: "))
        total += grade
        input -= 1

    avg = calc_average(total)
    abc_grade = letterGrade(grade)
    print("Average: " +str(avg))
    print("Grades: " +str(abc_grade))

def calc_average(total):
    return total / 5

def letterGrade(grade):
    if 90 <= grade <= 100:
        return "A"
    elif 80 <= grade <= 89:
        return "B"
    elif 70 <= grade <= 79:
        return "C"
    elif 60 <= grade <= 69:
        return "D"
    else:
        return "F"

main()

你还需要添加一些逻辑来结束你的while循环。目前,我没有看到任何将其设置为假的内容。由于您的平均方法被硬编码为仅平均5个输入,我重新设置了while循环以获取5个输入

答案 3 :(得分:0)

main()函数中的变量define仅在main函数内可用。您可以在main函数内移动引用total的代码来解决问题。

 def main():
        total = 0
        avg = 0
        abc_grade = 0


    grade = int(input("Enter a Grade: "))
    total += grade
    avg = calc_average(total)
    abc_grade = letterGrade(grade)

    print("Average: " + str(avg))
    print("Grades: " + str(abc_grade))

def calc_average(total):
    return total / 5

def letterGrade(grade):
    if 90 <= grade <= 100:
        return "A"
    elif 80 <= grade <= 89:
        return "B"
    elif 70 <= grade <= 79:
        return "C"
    elif 60 <= grade <= 69:
        return "D"
    else:

        return "F"

while(True):
    main()

答案 4 :(得分:0)

实际上你的代码存在很多问题。

话虽如此,我建议您将while循环移动到main()函数中,并使用上面链接中的一种方法在完成后退出while循环。像这样:

def main():
    # variable declaration
    total = 0
    avg = 0
    abc_grade = 0

    while(True):
        # do something 
        ....
        # break out when done

最后但并非最不重要的是,您应该使用string + str(expression)print函数中连接字符串,还有更好的方法可以做到这一点。我建议你像这样使用format

print("Average: {avg}".format(avg=avg)