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

如何用Python从分数列表提取分子和分母以完成约分?

分数文件约分代码问题修复方案

原代码核心问题

  • 外层循环的f1.readline()会直接读取并丢弃一整行内容,导致后续read()操作只能从下一行开始读取,逻辑完全错位
  • 内层循环中调用f1.read(1)读取到的非/字符没有存入分子变量,直接被丢弃,同时后续的f1.read(i)会连续读取i个字符,导致分子内容错位、丢失前导字符
  • 读取分母时错误使用了分子的长度变量i作为读取长度,且没有处理行尾的换行符,无法正确获取分母数值

修复方案

优先采用逐行读取+字符串拆分的实现逻辑,不需要手动控制字符读取,避免IO指针偏移错误:

# 逐行遍历输入文件
for line in f1:
    # 去除首尾空白符(换行、空格等)
    line = line.strip()
    # 跳过空行
    if not line:
        continue
    # 按/拆分得到分子、分母字符串
    num_str, den_str = line.split('/')
    num, den = Simplify(int(num_str), int(den_str))
    # 写入结果
    f2.write(f"{num}/{den}\n")

如果需要保留逐字符读取的实现逻辑,可参考如下修正代码:

while True:
    cur_char = f1.read(1)
    # 读到文件末尾退出循环
    if not cur_char:
        break
    # 读取分子
    num_str = ''
    while cur_char != '/':
        num_str += cur_char
        cur_char = f1.read(1)
    # 跳过/字符,开始读取分母
    cur_char = f1.read(1)
    den_str = ''
    # 读到换行或者文件末尾停止分母读取
    while cur_char not in ('\n', ''):
        den_str += cur_char
        cur_char = f1.read(1)
    num, den = Simplify(int(num_str), int(den_str))
    f2.write(f"{num}/{den}\n")

内容的提问来源于stack exchange,提问作者Diego Martín Soler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:36:04