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

Python统计电影演员数量:解决max函数返回值不符预期问题

解决方法:正确统计电影对应的演员数量

你的统计代码逻辑完全错误——当前代码是在统计电影标题的出现次数,而非对应演员的数量,这就是max()返回97而非实际207的原因。

问题根源

你写的统计代码里,is_Title每次循环切换状态,每碰到标题行就给该标题的计数+1。但根据你的需求,文件格式应该是一个电影标题后跟着多行演员信息(而非标题、演员交替出现),你的遍历逻辑完全误解了文件结构。

正确实现思路

假设文件结构为:

电影标题1
演员A
演员B
...
电影标题2
演员X
演员Y
...

我们需要:

  • 遍历文件时,记录当前统计的目标电影
  • 遇到新标题时,切换当前统计对象
  • 遇到演员行时,给当前电影的演员计数+1

修正后的代码

# 初始化字典:键为电影标题,值为对应演员数量
movie_actor_counts = {}
current_movie = None

# 用with语句自动管理文件,无需手动close
with open("你的文件路径", "r") as fhand:
    for line in fhand:
        line = line.strip()
        if not line:  # 跳过空行,避免干扰统计
            continue
        
        # 判断当前行是标题还是演员:这里假设标题行不含逗号(演员行是"演员名, 角色名"格式)
        # 你可以根据文件实际格式调整判断条件,比如标题行全大写/长度更短等
        if current_movie is None:
            # 初始状态,当前行是第一个电影的标题
            current_movie = line
            movie_actor_counts[current_movie] = 0
        else:
            if "," not in line:
                # 新的电影标题,切换统计目标
                current_movie = line
                movie_actor_counts[current_movie] = 0
            else:
                # 演员行,计数+1
                movie_actor_counts[current_movie] += 1

# 找出演员数量最多的电影
top_movie = max(movie_actor_counts.items(), key=lambda item: item[1])
print(f"演员最多的电影:《{top_movie[0]}》,共{top_movie[1]}位演员")

为什么原代码无效?

你的统计代码片段:

if (is_Title):
    if line not in actors:
        actors[line] = 1
    else:
        actors[line] = actors[line] + 1
is_Title = not is_Title

这段代码的逻辑是每遇到一次标题行,就给该标题的计数+1,本质是统计标题重复出现的次数,而非对应演员的数量。比如一个有207位演员的电影,标题只会出现1次,所以计数是1;你得到的97是某个标题重复出现了97次,完全不是你想要的结果。

额外提示

  • 始终用with语句操作文件,避免因忘记close()导致资源泄漏
  • 处理文件时务必跳过空行,否则会出现无效计数
  • 如果文件的标题和演员行有明确区分规则(比如标题有特定前缀),一定要在代码里明确判断,避免统计偏差

内容的提问来源于stack exchange,提问作者Justin Watts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:50:50