你能告诉我,为什么这段代码返回False?我刚刚开始学习python,并且不知道为什么这样做不起作用。
#!/usr/bin/python
from math import *
lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}
def average(numbers):
total = sum(numbers)
total = float(total)
total = total / len(numbers)
return total
def get_average(students):
homework = average(students["homework"])
quizzes = average(students["quizzes"])
tests = average(students["tests"])
homework = homework * 0.1
quizzes = quizzes * 0.3
tests = tests * 0.6
score = tests + quizzes + homework
score = float(score)
return score
def get_letter_grade(score):
score = float(score)
if score == int or score == float:
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
else:
return False
print get_letter_grade(get_average(lloyd))
提前谢谢你;)
答案 0 :(得分:1)
问题在于:
if score == int or score == float:
你想要的是:
if isinstance(score, (int, float)):
您的变量score
永远不会等于班级int
或班级float
。但它可以是int
或float
的实例。
另一个有效的变体是:
if type(score) is int or type(score) is float:
或:
if type(score) in (int, float):
答案 1 :(得分:1)
在尝试进行类型比较之前,行:
score = float(score)
将score
所有内容转换为浮点数。检查后面的score
类型是没有意义的 - 它必须是一个浮点数。如果score
无法转换为浮点数,则会抛出ValueError
异常,并且根本不会执行后续代码。
话虽如此,我认为你的意思是进行类型比较:
if type(score) == int or type(score) == float:
这会有效,因为您要将score
的类型与类型 int/float
进行比较。但是,最好(因为isinstance()
考虑继承)来执行这样的检查:
if isinstance(score, (int, float)):
但是,正如我在开头所说的那样,不需要进行类型检查,因为在检查时,变量必须是浮点数。
您可以重写函数以使用try/except
块,如下所示:
def get_letter_grade(score):
try:
score = float(score)
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
except ValueError:
return False
答案 2 :(得分:0)
您应该以这种方式检查类型
/etc/hosts
而不是
if type(score) == int or type(score) == float:
因为得分是值而非类型本身,所以它总是返回false。
此外,如果您将其转换为浮动,则可以将其删除。这是更安全的方式:
if score == int or score == float: