如何用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
相关产品推荐
相关产品推荐

