2.5 赋值运算
赋值运算符使用了和等号一样的符号,但是它和等号是不一样的。初学者由于等号的思维定势,非常容易出错!
赋值运算是指把“=”右边的内容,赋给“=”左边的变量。
(1)左边必须是变量;
(2)右边必须可以计算出一个值;
(3)左边和右边可以不相等。这个不是等号,不代表左右两边相等。
看一个例子:
a=a+5这个例子可以清楚的看到,赋值并不是等号,这个计算式是把a的值加上5,然后再赋值给a,这样操作后a原来的值被覆盖了。假如a的值是5,那么计算后a的值就是10了。
(4)赋值表达式本身也有值,它的值就是右边表达式计算的结果
由于这个特性,赋值运算符还可以连着写,如下所示:
a=b=c=d=f=6+7这样的式子(当然abcdef都是已经定义好的变量),最先计算的是最右边的6+7,然后f=13这个赋值表达式的值是13,这个值又赋给了d,以此类推,最后a、b、c、d、e、f的值都是13。
(5)python独有的赋值,可以用一个赋值,给多个变量赋值。例如:
a,b=1,2print(a,b)
我们来实现这样的功能:两个变量的值互换。
如果仅仅是这样做:a=b,那么b的值就赋给a了,a原来的值就被覆盖掉了,你可以想象成b的值复制到a那里去同时覆盖掉了a原来的值。这样的操作是无法互换变量的值的。
经典的两个变量交换的算法:
a=8b=5print("a=",a, ",b=", b)#把a的值保存到t里面 t=a #t=8 a=8 b=5#把b的值赋给a,那么a原来的值就没有了,此时a和b的值一样 a=b #t=8 a=5 b=5#把t的值赋给b,因为t保存了a原来的值,所以这样一来,a和b的值就和运算前置换了。b=t #t=8 a=5 b=8print("a=",a, ",b=", b)
如果使用同时赋值,那么互换操作可以异常简单:
a=3b=5print(a,b)a,b=b,aprint(a,b)练习题
-
判断下面的赋值运算是否正确,假定所有变量都是已赋值的整数类型变量1.a=8 (2分) [判断]2.4=4 (2分) [判断]3.8=a (2分) [判断]4.a=a+4 (2分) [判断]5.a+4=a (2分) [判断]6.b=a (2分) [判断]7.b=b+b (2分) [判断]8.b=a+b (2分) [判断]
-
变量的值互换1.补足下面的代码,使得a和b变量的值置换: (10分) [编程填空]
<code><div class='codeNewLine'>a=5</div><div class='codeNewLine'>b=8</div><div class='codeNewLine'>t=b</div><div class='codeNewLine'> </div><div class='codeNewLine'> </div><div class='codeNewLine'>print(str(a)+<span class='string'>","</span>+str(b))</div></code>2.深入课题:如果不引用第三个变量t,能否做到a和b的值互换呢? (10分) [编程填空]是可以做到的,看下面的代码:
a=a - b
b=a + b #此时a的值是原来的a-b,如果再加上b,那么b将等于a,即a-b+b=a
a=b - a #经过上面的运算,此时b的值已经是a了,a的值还是原来的a-b。用b-a将得到结果。
可以把上述代码运行就知道是否正确了(必须要定义a和b,同时给a和b初始化才能运行,最后还要打印出a和b,看是否真的换过来了)。
完成下面的代码,达到置换a、b值的效果,:<code><div class='codeNewLine'>a=5</div><div class='codeNewLine'>b=8</div><div class='codeNewLine'>a=b-a</div><div class='codeNewLine'> </div><div class='codeNewLine'> </div><div class='codeNewLine'>print(str(a)+<span class='string'>","</span>+str(b))</div></code>3.看看下面,有异曲同工之妙: (10分) [编程填空]b=a+b
a=b-a #此时a等于原来b的值
b=b-a #此时b等于原来的a的值
思考上面的三行代码,并完成下面代码使得a、b值互换:<code><div class='codeNewLine'>a=20</div><div class='codeNewLine'>b=10</div><div class='codeNewLine'>a=a+b</div><div class='codeNewLine'> </div><div class='codeNewLine'> </div><div class='codeNewLine'>print(str(a)+<span class='string'>","</span>+str(b))</div></code>