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

Python中计算剧本场景八分之一页时长总和的实现问题

解决剧本八分之一页时长统计问题

核心问题是fractions.Fraction会自动约分,而我们需要强制保留分母为8的格式,所以不能直接依赖它的默认计算。换个思路,我们可以把所有时长都转换成「多少个1/8单位」来计算,最后再转成要求的格式。

实现思路

  • 把每个时长字符串转换为总共有多少个1/8单位:
    • 纯分数格式(如"2/8"):直接取分子作为份数
    • 整数加分数格式(如"1 4/8"):计算整数×8 + 分数分子得到总份数
  • 将所有场景的份数相加,得到总份数
  • 把总份数转换回带分数格式(严格保留分母8)

代码实现

def parse_length(length_str):
    # 拆分整数部分和分数部分
    if ' ' in length_str:
        integer_str, fraction_str = length_str.split(' ', 1)
        integer = int(integer_str)
        numerator = int(fraction_str.split('/')[0])
    else:
        integer = 0
        numerator = int(length_str.split('/')[0])
    # 计算总共有多少个1/8单位
    return integer * 8 + numerator

def calculate_total_length(scene_lengths):
    total_eighths = sum(parse_length(length) for length in scene_lengths)
    integer_part = total_eighths // 8
    fraction_part = total_eighths % 8
    
    # 格式化结果
    if integer_part == 0:
        return f"{fraction_part}/8"
    elif fraction_part == 0:
        return f"{integer_part}"
    else:
        return f"{integer_part} {fraction_part}/8"

# 测试示例
scene_1 = "2/8"
scene_2 = "1 4/8"
total = calculate_total_length([scene_1, scene_2])
print(total)  # 输出: 1 6/8

代码说明

  1. parse_length函数:专门处理单个时长字符串,把它转换成统一的八分之一份数,确保计算时不会出现约分问题
  2. calculate_total_length函数:
    • 先求和所有场景的总份数
    • 通过整除和取余拆分出整数部分和分数部分
    • 根据不同情况输出对应格式:纯分数(整数部分为0)、纯整数(分数部分为0)、带分数(两者都不为0)
  3. 这种方式完全贴合影视行业的需求,严格保留八分之一的格式,不会自动约分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:54:23