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

