You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:19:58