Python:将分数转换为成绩 - 参数

时间:2014-04-17 14:25:22

标签: python if-statement python-3.x

好的,所以对于我的作业,我需要编写一个将分数转换为等级的函数...

name = input("Hello, what is your name?\n")
print("Welcome", name)
mod1 = int(input("Please enter your module 1 result.\n"))
mod2 = int(input("Thank you, please enter your module 2 result.\n"))
print("Great")
grade = 0
grade2 = 0
if mod1 or mod2  >= 80:
    grade = "A"
    grade2 = "A"
elif mod1 or mod2  >=70:
    grade = "B"
    grade2 = "B"
elif mod1 or mod2 >=60:
    grade = "C"
    grade2 = "D"
elif mod1 or mod2 >=50:
    grade = "D"
    grade2 = "D"
elif mod1 or mod2 >=40:
    grade = "E"
    grade2 = "E"
elif mod1 or mod2 >=30:
    grade = "F"
    grade2 = "F"
elif mod1 or mod2 >=20:
    grade= "G"
    grade2= "G"
elif mod1 or mod2 >=10:
    grade= "U"
    grade2= "U"

print(grade, grade2)

每当我运行它时,结果是:A,A ????

3 个答案:

答案 0 :(得分:1)

您的布尔表达式正在执行:

if (mod1) or (mod2 >= 80):
    # ....

这意味着它正在测试mod1mod2 > 80的布尔值True。任何非零的数字在Python中都被认为是“真实的”(即bool(2) == True; bool(0)== False ) and as such your first if statement will always be triggered (unless you set mod1 and mod2`为0)。

你可能想要的是

if (mod1 >= 80) or (mod2 >= 80):
    # ...

或者,您可以使用any和生成器表达式:

mod = [mod1, mod2]
if any(i >= 80 for i in mod):
    # ...

这将测试mod的所有值以查看它们是否大于80并且它们中的任何一个返回True将导致if语句进展。

答案 1 :(得分:1)

if mod1 or mod2  >= 80:

实际上这是if (mod1) or (mod2 >= 80):。如果mod1有任何值,则True,这样就会停止检查其余值,只执行此if部分中的块。

将其更改为if mod1 >= 80 or mod2 >= 80:,依此类推,即可使用。

为什么他们都是相同的,这是因为你从最高等级向下检查,当一个等级被这个条件满足时然后两者都设置为它。逐步完成以下操作:

# Using these input values.
mod1 = 10
mod2 = 81

# mod2 is greater than 80, we enter this block.
if mod1 >= 80 or mod2  >= 80:
    grade = "A"
    grade2 = "A"

# Now...
grade = "A"
grade2 = "A"

答案 2 :(得分:0)

Whenever I run this the results are : A,A ????

那是因为这里

if mod1 or mod2  >= 80:
    grade = "A"
    grade2 = "A"

您检查mod1是否不是None,并且因为您刚刚为输入分配了值,所以确实不是None。无论您输入什么,它都将始终输入第一个if并将A, A作为输出。