需要帮助查找我的 python 代码中的错误

need help finding error on my python code

我正在编写一个程序来提示输入 0.0 到 1.0 之间的分数。如果分数超出范围打印错误。如果分数在 0.0 和 1.0 之间,则使用以下打印等级 table:Score Grade >= 0.9 A>= 0.8 B>= 0.7 C>= 0.6 D< 0.6 F.

举例说明它最后应该做什么:

输入分数:0.95,A 输入分数:完美,输入无效 输入分数:10.0,输入无效 输入分数:0.75,C 输入分数:0.5,F

这是我现在的代码:

score = input("Enter Score: ")


try:
    score= float(score)
    if(score >= 0.0 and score <= 1.0):
        if (score>= 0.9):
            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")
    else:
        print("Invalid input")

我好像听不懂 运行。任何帮助,将不胜感激。

Green-Avocado 给出了很好的答案。我会添加一个 while 循环来重试,直到输入有效;

# loop until complete
while True:
    score = input("Enter Score: ")

    # let's try this 
    try:
        score = float(score)
        if score >= 0.0 and score <= 1.0:
            if score >= 0.9:
                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")

            # exit the loop on completion
            break

        # else raise an exception
        raise

    # if problem with float(score) or exception raised
    except:
        print("Invalid input")

您的 try 块之后需要一个 except 块来处理错误。 而不是在最后 elif 中打印错误,这可以用来处理所有错误。 您可以使用 raise.

手动引发错误
score = input("Enter Score: ")

try:
    score = float(score)
    if score >= 0.0 and score <= 1.0:
        if score >= 0.9:
            print("A")
        elif score >= 0.8:
            print("B")
        elif score >= 0.7:
            print("C")
        elif score >= 0.6:
            print("D")
        else:
            print("F")
    else:
        raise
except:
    print("Invalid input")

您的 try 语句可能想要做两件事:验证用户输入是否可以转换为 float,以及生成的浮点数在 0-100 范围内。 try 语句中不应包含任何其他内容。

如果值不是浮点数或超出范围,可以让循环继续获取另一个输入。否则,您可以继续使用单个 if 语句将分数映射到字母等级。

while True:
    score = input("Enter score: ")

    try:
        score = float(score)  # Could raise ValueError
        if not (0 <= score <= 1.0):
            raise ValueError
    except ValueError:
        print("invalid input")
    else:
        break

if (score>= 0.9):
    print("A")
elif (score>= 0.8):
    print("B")
elif(score>= 0.7):
    print("C")
elif (score>= 0.6):
    print("D")
else:  # Only option left for an in-range value.
    print("F")

严格来说,范围检查也可以移出 try 语句:

while True:
    try:
        score = float(score)
    except ValueError:
        print("invalid input")
        continue

    if 0 <= score <= 1.0:
        break

    print("invalid input")

我将失败的范围检查转换为 ValueError,主要是为了有一个错误消息和一个我们使用 break 的地方,而不是明确的 continue。有几种构造方法,但共同的特点是你先验证score有一个适合下面等级图的值。