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

Jos*_*ith 1 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")
Run Code Online (Sandbox Code Playgroud)

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

Gar*_*tty 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.
Run Code Online (Sandbox Code Playgroud)

在这里,我们使用元组列表来定义边界.我们检查从最高到最低,如果我们匹配则爆发(因此它不会"降低"到较低的分数).

同样,您可以看到我使用循环来收集标记中的数据.一个好的迹象表明你在编程时以低效的方式做某事是你复制并粘贴(或一次又一次地输入)一些代码.这通常意味着您需要将其置于循环中,或使其成为一个函数.我也使用int(input())而不是eval(input()),这是一个更安全的选项,因为它不允许执行用户想要的任何东西.ValueError如果用户输入的内容不是数字,它还允许我们很好地捕获异常.

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

就像一张纸条一样,完全可以做到

if 31 < average < 41: #Equivalent to `if 31 < average and average < 41:`
    print("Grade B")
Run Code Online (Sandbox Code Playgroud)

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