如何在Python中使用fractions模块输出带分数形式运算结果
实现分数运算结果的带分数输出
你可以通过编写一个独立的转换函数来实现带分数输出,完全不会破坏原有代码的运算逻辑——原有代码负责计算,这个函数只处理结果的格式转换。
转换函数的思路
对于一个fractions.Fraction对象:
- 如果分子绝对值小于分母:直接返回原分数的字符串形式
- 如果分子绝对值大于等于分母:
- 计算整数部分:
分子 // 分母 - 计算剩余分数部分:
分子 % 分母 / 分母(会自动约分) - 如果剩余分数为0,只返回整数;否则返回
整数部分 剩余分数的格式
- 计算整数部分:
- 处理负数情况:负号只保留在整数部分前
修改后的完整代码
import fractions def convert_to_mixed(frac): # 处理负数,先取绝对值计算,最后加负号 sign = "-" if frac < 0 else "" abs_frac = abs(frac) integer_part = abs_frac.numerator // abs_frac.denominator remainder_numerator = abs_frac.numerator % abs_frac.denominator if remainder_numerator == 0: return f"{sign}{integer_part}" elif integer_part == 0: return f"{sign}{abs_frac}" else: remainder_frac = fractions.Fraction(remainder_numerator, abs_frac.denominator) return f"{sign}{integer_part} {remainder_frac}" # 原有输入和运算逻辑完全不变 num1 = int(input('Enter 1st number Numerator: ')) den1 = int(input('Enter 1st number Denominator: ')) num2 = int(input('Enter 2nd number Numerator: ')) den2 = int(input('Enter 2nd number Denominator: ')) f1 = fractions.Fraction(num1, den1) f2 = fractions.Fraction(num2, den2) equ = str(input('Select Operation, +, * or /?: ')) # 输出时调用转换函数 if equ == '*': print('{} * {} = {}'.format(f1, f2, convert_to_mixed(f1 * f2))) if equ == '/': print('{} / {} = {}'.format(f1, f2, convert_to_mixed(f1 / f2))) if equ == '+': print('{} + {} = {}'.format(f1, f2, convert_to_mixed(f1 + f2)))
测试效果
比如输入1/4 + 5/4,会输出1/4 + 5/4 = 1 1/2;如果是7/2,会输出3 1/2;如果是3/4,则直接输出3/4;负数比如-5/2会输出-2 1/2。
内容的提问来源于stack exchange,提问作者elfuegoeggo
相关产品推荐
相关产品推荐

