Python中find_by_year函数的else子句为何先执行?
问题根源:else子句的缩进错误
你的问题核心是else的缩进位置错了——你把它和循环内部的if放在了同一缩进层级,这会导致循环的每一次迭代,只要当前电影年份不匹配,就会触发else输出"Invalid year"。
对应你遇到的现象:
- 输入1954时,程序先遍历到年份不匹配的电影,立刻执行
else输出错误提示;之后遍历到匹配的电影,才执行if分支输出结果,所以会先显示"Invalid year"再显示找到的电影。 - 没加
return时,循环会遍历所有电影元素,每遇到一个不匹配的就输出一次错误,所以会多一次"Invalid year"。 - 加了
return后,找到匹配项就直接跳出函数,循环自然不会继续遍历第三个元素。
修正方案
把else的缩进调整到和for循环同级,这样else只会在整个循环跑完、完全没找到匹配年份的电影时才执行。
错误写法示例:
def find_by_year(year, movies): for movie in movies: if movie["year"] == year: print(f"Found: {movie['title']}") # 这里加return会直接跳出函数 else: print("Invalid year") # 每一次不匹配都执行
正确写法示例:
def find_by_year(year, movies): for movie in movies: if movie["year"] == year: print(f"Found: {movie['title']}") return # 找到后直接返回,避免多余循环 # else和for同级,循环正常结束(没找到匹配)才执行 print("Invalid year")
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

