Skip to main content
 首页 » 编程设计

Python之计算冲突。需要某种范围变量

2025年05月04日11zlslch

我真的很难过。我正在为我的老师写一个程序(顺便说一句,我使用 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 要多得多的输入。