python调用自定义函数中的变量_Python新手提问:在自定义函数中调用自定义函数,引发局部变量值自发改变的问题...

是这样的,我没有找到Python里面的list数乘与加减运算,于是自己定义了它们,代码如下:

def ntl(n1: float, list1: list) -> list:

for i in range(0, len(list1)):

list1[i] *= n1

return list1

def lsb(list1: list, list2: list) -> list or bool:

if len(list1) != len(list2):

return False

for i in range(0, len(list1)):

list1[i] -= list2[i]

return list1

前面的ntl是向量数乘(n times list),后面的lsb是向量相减(list subtraction)。这两个函数在后面被调用,调用的地方是一个解方程算法:即解决au+bv=gcd(u,v)这样的线性丢番图方程,或者数论里面提到的裴蜀(Bézout)定理,其中u,v是两个正整数,gcd是最大公约数。

代码如下:

def bezout(n1: int, n2: int) -> int or bool:

if type(n1) != int or type(n2) != int:

return False

list1 = [1, 0, n1]

list2 = [0, 1, n2]

while list1[2] != 0:

list3 = list1 # 01

list1 = lsb(list2, ntl(int(list2[2] / list1[2]), list1)) # 02

list2 = list3 # 03

return list2

我使用Pycharm社区版运行这些代码。在调试时,我选择了bezout(9785, 18967)进行验算。然而在断点# 02处,每当运行到第3轮循环时,list3的值都会自发改变,见下面的截图:

bVS5uR?w=1160&h=428

bVS5u4?w=1160&h=428

代码中没有全局变量,我认为不同函数中的局部变量不会相互影响,况且在之前的代码中,list3没有出现过。这个算法本身是没有问题的。bezout这个函数输出的结果在算数上是成立的,最终输出:

6257064 x 9785 - 3227994 x 18967 == 9042 然而化简后的结果应该是:692 x 9785 - 357 x 18+67 == 1

我不知道到底发生了什么,请各位帮忙看看,多谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值