Python 为什么我的;总数;变量未定义?

Python 为什么我的;总数;变量未定义?,python,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

说到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()
def main():
总数=0
平均值=0
abc_等级=0
def calc_平均值(总计):
返回总数/5
def字体等级(等级):

如果90未在外部范围内定义,则
while
循环在外部范围内定义。您可以将
while
循环包装到函数中,并从
main
调用它,或者用以下内容替换
main

total = 0
avg = 0
abc_grade = 0

i、 e.在全局范围内定义变量。

首先调用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()
不会执行。

因此,您的程序流程如下所示:

如果为True,则添加一些内容并进行平均并打印结果。然后运行main方法

缩进在python中非常重要,因此,通过使while循环与Main()处于相同的缩进位置,您可以首先运行所有缩进。所以你的程序第一次看到total是在你说total+=grade的时候

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

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()
def main():
总数=0
平均值=0
abc_等级=0
输入=5
而(输入>0):
等级=整数(输入(“输入等级:”)
总数+=年级
输入-=1
平均值=计算平均值(总计)
abc_等级=字母等级(等级)
打印(“平均:+str(平均))
打印(“等级:+str(abc_等级))
def calc_平均值(总计):
返回总数/5
def字体等级(等级):

如果90main()函数中的变量define仅在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()
def main():
总数=0
平均值=0
abc_等级=0
等级=整数(输入(“输入等级:”)
总数+=年级
平均值=计算平均值(总计)
abc_等级=字母等级(等级)
打印(“平均:+str(平均))
打印(“等级:+str(abc_等级))
def calc_平均值(总计):
返回总数/5
def字体等级(等级):

如果90事实上你的代码有很多错误

  • 首先,正如我在您的问题的评论会话中已经提到的,您的
    total
    变量是您的
    main
    函数的局部变量,因此无法在全局独家新闻中访问。这是一本书

  • 这里还有一个无限的while循环。你应该考虑阅读,这表明当你满意的时候如何走出循环。

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

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

    while(True):
        # do something 
        ....
        # break out when done
print("Average: {avg}".format(avg=avg)
最后但并非最不重要的一点是,您应该使用
string+str(expression)
print
函数中连接字符串,有更好的方法可以做到这一点。我建议您这样使用:

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

    while(True):
        # do something 
        ....
        # break out when done
print("Average: {avg}".format(avg=avg)

您的
total
变量是
main的本地变量,无法在全局独家新闻中访问