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
代码说明
parse_length函数:专门处理单个时长字符串,把它转换成统一的八分之一份数,确保计算时不会出现约分问题calculate_total_length函数:- 先求和所有场景的总份数
- 通过整除和取余拆分出整数部分和分数部分
- 根据不同情况输出对应格式:纯分数(整数部分为0)、纯整数(分数部分为0)、带分数(两者都不为0)
- 这种方式完全贴合影视行业的需求,严格保留八分之一的格式,不会自动约分
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

