num1 = 10
num2 = 20
定义两个数,请交换两个数的值 !
我们初学者,一般拿到这道题大多数 粗略的想法:
两个数交换,那就 我把 num2 赋给 num1, 再把 num1 赋给 num2 不就好了!
来试试看 :
# 交换前 num1 = 10 num2 = 20 # 交换后 num1 = num2 bum2 = num1
print("num1的值是:%s,num2的值是:%s" % (num1, num2))
运行结果 :
===>>>
# 诶,结果怎么和初学者心里想的不一样呢??
===>>>
因为这样运行实质上不是交换,而是覆盖啊!!!
交换前, num1 = 10 ,num2 = 20
你现在进行 : num1 = num2
这不就是 把 2 的值 赋给了 1 那赋值后不就 改变了 num1 的值,使得变为 20
而 num2 实质上还是 20 并没有改变!!!!
所以此法行不通!! ( 这也是 初学者最容易直接想到的方法!!)
接下来,正式介绍下几种方法 :
方法一 :中间变量法
# 我们既然会存在覆盖的情况,那我们就想,那不如再引入一个变量,我们先把第一个数赋
给那个中间变量那里,等于说先存起来,然后再将另一个数赋给第一个数,这样实质上就
是相当于 第一个数已经有了第二个数的值,最后,再将中间变量赋给 第二个数,这样就把
第一个数的值赋给了第二个数!!
从而实现 数的交换 !!
代码实现 :
===>>>
# 交换前 num1 = 10 num2 = 20 print("交换前,num1的值是:%s, num2的值是:%s " % (num1, num2))
# 交换后 temp = num1 num1 = num2 num2 = temp print("交换后,num1的值是:%s, num2的值是:%s" %
(num1, num2))
运行结果 :
===>>>
很显然,两数交换成功 !!!!
方法二 :数学法
方法一虽然可以实现两个数的交换,但是从内存角度来说,本代码的中间变量其实有些
浪费内存!!!!
因此,我们为了避免引入第三个量 浪费内存,我们优化下代码
执行数学法 !!
执行代码 :
===>>>>
# 交换前 num1 = 10 num2 = 20 print("交换前,num1的值是:%s, num2的值是:%s " % (num1, num2))
# 交换后 num1 = num1 + num2 num2 = num1 - num2 num1 = num1 - num2
print("交换后,num1的值是:%s, num2的值是:%s" % (num1, num2))
其实本方法完全就是运用了 数学的代数思路,都是些最简单的代数运算;
不仅实现了 问题的解决,而且并没有引入第三个变量浪费内存!!
方法三 : Python 法
本方法是 Python 独有的方法 ,Python 自身提供了一种交换数的方式
代码实现 :
===>>>
num1 = 10 num2 = 20 num1, num2 = num2, num1 print("交换后,num1 = %s,num2 = %s" %
(num1, num2))
Python 这种方法是及其简单的,它的底层类似于第一种方法,它实质上是调用了底层的寄
存器,把一种数先存在寄存器里了; 它自身底层帮助我们去做了,你只需要直接操作就行