我真的很难过。我正在为我的老师写一个程序(顺便说一句,我使用 Python 3),这样他就可以把这个代码给学生来计算他们的成绩,而不是等待他们的成绩单。我只是一个初学者,所以请尽量保持简单的答案 :D
好的,问题来了。我拥有代码所需的所有输入。输入是这样工作的。 A = 5 B = 4 C = 3 D = 2 E = 1。如果你的成绩全是 A,你会得到 50 分,依此类推,但如果结果是 35 分,所有成绩计算器都会崩溃。因为如果它>30它是一个B,但如果它>20它是一个C,但是>20和>30同时打印。因为如果结果大于 30,它们都会执行。而且我不知道如何使它打印出来,如果它是 31 到 40,则显示“B”。
这是代码
a = eval(input())
b = eval(input())
c = eval(input())
d = eval(input())
e = eval(input())
f = eval(input())
g = eval(input())
h = eval(input())
i = eval(input())
j = eval(input())
average = a + b + c + d + e + f + g + h + i + j
print(average)
if average >41:
print(" Grade A ")
if average >31:
print(" Grade B")
if average >21:
print(" Grade C")
if average >11 :
print(" Grade D")
if average >0
print(" Grade E")
任何帮助将不胜感激!谢谢。
请您参考如下方法:
做你想做的最好的方法是定义一组数据。 if/elif block 可以工作,但很笨拙,需要大量额外输入:
import sys
mark_boundaries = [("A", 41), ("B", 31), ("C", 21), ("D", 11), ("C", 0)]
try:
marks = []
for i in range(10):
marks.append(int(input()))
except ValueError:
print("You entered an invalid mark, it must be a number.")
sys.exit(1)
average = sum(marks) #I'd just like to note the misleading variable name here.
#average = sum(marks)/len(marks) #This would be the actual average mark.
print(average)
for mark, boundary in mark_boundaries:
if average >= boundary:
print("Grade "+mark)
break #We only want to print out the best grade they got.
这里我们使用一个元组列表来定义我们的边界。我们从最高到最低检查,如果我们匹配则突破(因此它不会“掉落”到较低的分数)。
同样,您可以看到我使用了一个循环来收集标记的数据。一个好的迹象表明你在编程时以低效的方式做某事是你复制并粘贴(或一次又一次地输入)了一些代码。这通常意味着你需要把它放在一个循环中,或者让它成为一个函数。我还使用了 int(input()) 而不是 eval(input()),这是一个更安全的选择,因为它不允许执行用户想要的任何东西.如果用户输入的内容不是数字,它还允许我们很好地捕获 ValueError 异常。
请注意,有进取心的人可能会查看一对元组列表,并认为 dict 是一个很好的替代品。虽然在大多数情况下都是正确的,但在这种情况下,我们需要排序才能正确 - 在 dict 中,顺序是任意的,并且可能导致我们首先检查较低的分数,给他们一个比他们更低的分数应得的。
作为注释,完全可以做到
if 31 < average < 41: #Equivalent to `if 31 < average and average < 41:`
print("Grade B")
在 python 中。也就是说,对于这种用法,这将意味着比使用列表和循环或 if/elif 要多得多的输入。
