1

我真的很难过。我为我的老师编写了一个程序(我使用 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")

任何帮助将不胜感激!谢谢。

4

2 回答 2

5

做你想做的最好的方法是定义一组数据。if/elif块可以工作,但很笨拙,并且需要大量额外的输入:

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如果用户输入的不是数字,它还允许我们很好地捕获异常。

请注意,有进取心的人可能会查看对元组的列表,并认为 adict将是一个很好的替代品。虽然在大多数情况下是正确的,但在这种情况下,我们需要正确排序——dict顺序是任意的,可能导致我们首先检查较低的分数,给他们一个低于应得的分数。

就像一个注释,完全有可能做到

if 31 < average < 41: #Equivalent to `if 31 < average and average < 41:`
    print("Grade B")

在蟒蛇。也就是说,对于这种用法,这意味着比使用列表和循环或if/更多的输入elif

于 2012-04-26T15:08:04.520 回答
3

基本上,这就是你想要的:

if average >41:
    print(" Grade A ")
elif average >31: 
    print(" Grade B")
elif average >21:
    print(" Grade C")
elif average >11 :
    print(" Grade D")
elif average >0 
    print(" Grade E")
else
    print("You broke the system")

elif是 的缩写else if,因此仅在未执行前一个if/elif块时才执行。

于 2012-04-26T08:27:42.387 回答