Python分数化简函数返回值不生效,调用后原变量值未更新如何解决?
问题根因
- Python中整数属于不可变类型,函数内的形参
n、d是独立的局部变量,对这两个变量的重新赋值只会在函数局部作用域生效,不会修改外部全局变量a、b的取值。 - 你调用
simp(12,36)时没有接收函数返回值,函数计算得到的化简结果没有被赋值给外部变量,相当于计算结果被直接丢弃了。
注:原函数还存在隐藏逻辑问题:循环判断条件误用了固定的
limit变量,应替换为循环变量dividend,同时使用整数除法建议用//避免返回浮点数结果,下述修正方案中已经同步优化了这两处问题。
修复方案
只需在调用函数时接收返回值并赋值给原有变量即可,修正后代码如下:
def simp(n, d): # 取两数中更小值作为遍历上限 limit = min(n,d) # 从大到小遍历找最大公约数 for dividend in range(limit, 2, -1): if (n % dividend == 0) and (d % dividend == 0): n = n // dividend d = d // dividend # 返回化简后的分子分母 return (n, d) a = 12 b = 36 print(a, "/", b,) print("should be simplified down to") # 接收返回值赋值给外部变量 a, b = simp(a, b) print(a, "/", b)
运行后输出为:
12 / 36 should be simplified down to 1 / 3
内容的提问来源于stack exchange,提问作者Nam Khanh Nguyen
相关产品推荐
相关产品推荐

