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

时间:2012-04-26 08:19:08

标签: python python-3.x

我真的很难过。我正在为我的老师编写一个程序(我使用Python 3 btw),这样他就可以将这些代码交给学生来计算他们的成绩而不是等待他们的成绩单。我只是一个初学者,所以请尽量保持答案:D

好的,这是问题所在。我拥有代码所需的所有输入。输入就像这样工作。 A = 5 B = 4 C = 3 D = 2 E = 1.如果你得到直的A,你会获得50分,依此类推,但如果结果是35分,那么所有等级计算器都会崩溃。因为如果它的> 30是B,但是如果它的> 20是C,但是> 20和> 30同时打印。因为如果结果大于30,它们都会执行。我不知道怎么做它会打印说“B”如果它是31到40。

这是代码

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")

任何帮助都会受到极大的赞赏!感谢。

2 个答案:

答案 0 :(得分: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异常。

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

就像说明一样,完全可以做到

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

在python中。也就是说,对于这种用法,这意味着比使用列表和循环或if / elif要多打字。

答案 1 :(得分: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")

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