Python - 成绩计算器

时间:2017-09-21 17:43:41

标签: python

StackOverflow的新功能所以请原谅我的错别字。我刚刚开始学习Python,因此当我练习编写一些代码时,我在脚本中遇到了这些非常不寻常的错误,它不应该存在。请帮助我理解为什么以及如何摆脱它。我尝试制作成绩计算器,这是我写的脚本:

def ComputeGrade(Score):
    if score < 0 or score > 1:
        print ("Bad Score")
    elif score == 10.0:
        print ("Bad Score")
    elif score < 10.0:
        print ("A")
    elif score >= 0.8:
        print ("B")
    elif score >= 0.7:
        print ("C")
    elif score >= 0.6:
        print ("D")
    elif score < 0.6:
        print ("F")

try:
   score = float(input("Enter Score: "))
   print (ComputeGrade(score))
except ValueError as e:
    print ("Bad Score")

`不是将输出作为“等级”或错误消息“坏分数”,而是显示值 如果你能向我解释究竟出了什么问题,那真是太好了。

4 个答案:

答案 0 :(得分:3)

您的参数是以大写字母'S'表示的分数,而您使用的是小写字母''的变量分数。确保它们匹配或者将它们视为不同的变量。得分!=得分

如果你想要打印(ComputeGrade(score))来打印一个值,它需要在ComputeGrade()函数中返回一个值。即。

def printvalue():
    return "VALUE"
print(printvalue()) #this prints out the returned value of printvalue()

答案 1 :(得分:1)

正如其他答案所说,你不需要第二次print。只需调用函数:

ComputeGrade(score)

顺便说一下,这里显示的成绩计算器存在问题,因为所有有效成绩都会变成“A”,因为所有有效成绩都会达到第一个elif声明且小于10 (这不应该是1.0而不是10?)。另外,A和B之间没有任何截止点(假设它应该是0.9?)。

建议:只要您发现自己使用了大量elif语句,请考虑使用字典。字典允许您根据值“查找”某些内容。

它可能看起来像这样(因为变量区分大小写,我已将score切换为小写):

def ComputeGrade(score):
    grade_lookup = {
                    0<=score: "F",
                    0.6<=score: "D",
                    0.7<=score: "C",
                    0.8<=score: "B",
                    0.9<=score<=1.0: "A",
                    }

    grade = grade_lookup.get(True, "Bad Score")
    print(grade)

while True:
    try:
        score = float(input("Enter Score: "))
        break
    except ValueError:
        print("Bad number entered; try again.")

ComputeGrade(score)

grade_lookup字典评估每个大于语句并将其添加到字典中。如果greater-than语句为true,则会将True作为键添加,如果为false则添加False。由于字典一次只能有一个True键,每次大于语句结果为真时,等级会更新(从F到A)。

然后字典get方法查找与True相关联的成绩。如果没有,则表示给出的分数不在0到1.0之间,并且不是有效分数。在这种情况下,get方法会返回'Bad Score'

答案 2 :(得分:1)

再次,就像其他帖子所说,你有print两次。此外,您的逻辑看起来并不正确,这里有一些供您参考:

def ComputeGrade(score):

    if score > 0 and score <= 1:
        if score < 0.6:
            print("F")
        elif score < 0.7:
            print("D")
        elif score < 0.8:
            print("C")
        elif score < 0.9:
            print("B")
        else:
            print("A")
    else:
        print("Bad Score")

try:
   score = float(input("Enter Score: "))
   ComputeGrade(score)
except ValueError as e:
    print ("Bad Score")

答案 3 :(得分:0)

欢迎使用股权溢价!

该行:

print (ComputeGrade(score))

实际上将功能的位置打印在内存中,而不是功能中的内容。由于您已经在ComputeGrade中打印,因此无需打印。

你可以:

让ComputeGrade返回一个字符串,然后打印

def ComputeGrade(score):
...
elif (score >= 0.8):
    return "B"
...

print ComputeGrade(score)

或者您可以继续在函数本身中打印并删除ComputeGrade上的print语句:

ComputeGrade(score)

此处a similar question to yours.