Python列表推导式内置条件函数运行结果与预期不符问题求助
问题原因
你编写的列表推导式结构使用错误:
- 你将
grade_classification(result)放在了if后面的过滤判断位置,该函数返回的所有结果都是非空字符串,在Python中判定为布尔值True,因此所有原始分数都会被保留。 - 你将原始分数
result作为列表推导式的输出元素,自然只会得到原始的分数列表,没有得到转换后的评级结果。
另外你的函数中第一个分支返回的是小写fail,和你预期的大写Fail不匹配,需要同步修改。
修改方案
改写列表推导式,将grade_classification()的调用放在输出元素的位置,不需要额外设置过滤条件:
more_grades = [0.0, 50.0, 49.9, 79.0, 101.0, 65.0, 54.2, 48.2, 78.9] def grade_classification(grade): if grade < 40: result = 'Fail' # 修正小写fail为大写,匹配预期输出 elif 40 <= grade < 50: result = 'Pass' elif 50 <= grade < 60: result = '2:2' elif 60 <= grade < 70: result= '2:1' elif grade >= 70: result = 'First' else: result = 'unknown grade' return result studen_classficatin = [grade_classification(grade) for grade in more_grades] print(studen_classficatin)
运行后即可得到你预期的输出结果:['Fail', '2:2', 'Pass', 'First', 'First', '2:1', '2:2', 'Pass', 'First']
内容的提问来源于stack exchange,提问作者Ali Raza
相关产品推荐
相关产品推荐

