好的,所以对于我的作业,我需要编写一个将分数转换为等级的函数...
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 ????
答案 0 :(得分:1)
您的布尔表达式正在执行:
if (mod1) or (mod2 >= 80):
# ....
这意味着它正在测试mod1
和mod2 > 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
作为输出。