不使用max()函数,仅用for和if查找列表最大值时if语句出错求助
问题描述
任务要求:不使用max()等函数,仅通过for和if语句实现列表数值的最大值查找。
编写的Python代码如下:
student_scores = input ("Input a list of scores the students have got till now:\n").split(", ") print ("Okkay, here is your list of student scores: ", student_scores) max_ = student_scores[0] for score in student_scores: if score > max_: max_ = score print (max_)
当输入列表:11, 44, 8, 234时,输出结果为8,不符合预期;但为score和max_变量添加int()转换后结果正确。请问该if语句出错的原因是什么?
原因分析
问题出在字符串与字符串的比较逻辑上:
input()获取的内容默认是字符串类型,split(", ")分割后得到的student_scores列表里的每个元素都是字符串,而非数值类型。- 字符串比较是按单个字符的ASCII码值逐个对比的:
- 初始
max_是字符串"11",第一个循环对比"44"和"11":第一个字符"4"的ASCII码(52)大于"1"(49),所以max_更新为"44"。 - 下一个对比
"8"和"44":第一个字符"8"的ASCII码(56)大于"4"(52),所以max_被更新为"8"。 - 最后对比
"234"和"8":第一个字符"2"的ASCII码(50)小于"8"(56),所以max_保持为"8",最终输出8。
- 初始
- 当用
int()把字符串转换为整数后,就变成了数值大小的比较,此时234会被正确识别为最大值。
内容的提问来源于stack exchange,提问作者Alexander Shemetov
相关产品推荐
相关产品推荐

