我还是一个非常新的初学者,当涉及到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;在主要下将定义它。再次,我是一个初学者,所以任何帮助/解释都会很棒。
答案 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)
实际上你的代码存在很多问题。
首先,正如我在您的问题的评论会话中提到的,您的total
变量是main
函数的本地变量,因此无法在全局变量中访问。这是Short Description of Python Scoping Rules。
你还有一个无限的while循环。您应该考虑阅读Asking the user for input until they give a valid response,其中显示了当您满意时如何摆脱循环。
话虽如此,我建议您将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)