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

Python分数相加程序输出0/0,需修改哪部分代码得到正确结果?

代码错误点及修复方案

你的代码存在4个核心问题,逐一修复后即可得到正确结果:

  • 变量作用域问题:Python中整数是不可变类型,你在全局定义的n3、den3作为参数传入add_fraction时,函数内部修改的只是局部同名变量,不会同步到全局变量,所以最终输出始终是初始值0/0。你应该让add_fraction直接返回计算后的分子分母,而不是靠参数传值修改。
  • 分子计算逻辑错误:计算n3的代码行中,第二项的系数写错,原本应该是n2 * (den3 // den2),你写成了n2 * (den2 // den1)。
  • 约分函数调用错误:首先你调用smallest时把参数顺序传反了,传成了smallest(den3, n3),应该是分子在前分母在后;其次你没有接收smallest的返回值,函数返回的约分结果被直接丢弃,等于没有做约分操作。
  • 冗余参数问题:add_fraction不需要接收n3、den3作为输入参数,这两个值完全可以在函数内部计算生成。

修正后完整代码

def gcd(a, b):
    if(a == 0):
        return b
    return gcd(b % a, a)

def smallest(n3, den3):
    common = gcd(n3, den3)
    n3 = n3 // common
    den3 = den3 // common
    return n3, den3

def add_fraction(n1, den1, n2, den2):
    # 计算公分母
    den3 = (den1 * den2) // gcd(den1, den2)
    # 计算通分后的分子和
    n3 = n1 * (den3 // den1) + n2 * (den3 // den2)
    # 约分并返回结果
    return smallest(n3, den3)

n1, den1, n2, den2 = map(int, input().split())
# 接收函数返回的结果
n3, den3 = add_fraction(n1, den1, n2, den2)
print("{num1}/{denom1} + {num2}/{denom2} = {num3}/{denom3}".format(
    num1=n1, denom1=den1, num2=n2, denom2=den2, num3=n3, denom3=den3
))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:27:01