课时6:Python之常用操作符

目录:

一、算术操作符

二、优先级问题

三、比较操作符

四、逻辑操作符

五、课时06课后习题及答案

******************

一、算术操作符

******************

>>> a = b = c = d = 10
>>> a += 1
>>> b -= 3
>>> c *= 10
>>> d /= 8
>>> (a,b,c,d)
(11, 7, 100, 1.25)

在这里我们发现,即使是进行整数间的除法,但是答案是自动返回一个浮点型的精确数值,也就是说Python用真正的除法代替了地板除法。                              

地板除法的概念是:计算结果取比商小的最大整型,也就是舍弃小数的意思。(注:例如3 / 2等于1)

>>> 3 / 2
1.5
>>> 3 // 2
1
>>> 3.0 // 2
1.0
>>> 3.0 / 2
1.5

值得注意的一点是,无论是整数运算还是浮点数运算,都不会执行地板除法。需要用//。

>>> 5%2
1
>>> 4%2
0
>>> 520 % 14
2
>>> 

百分号(%)表示求余数的意思。

******************

二、优先级问题

******************

先乘除后加减,如有括号先算括号里的。

>>> -3 * 2 + 5 / -2 -4
-12.5
>>> (-3) * 2 + 5 / (-2) -4
-12.5

Python中还有一个特殊的乘法,就是双星号(**),也称为幂运算操作符。例如3**2,双星号左侧的3称为底数,右侧的2称为指数,把这样的算式叫作3的2次幂,结果就是3*3==9.

在使用Python进行幂运算的时候,需要注意一点是优先级问题,因为幂运算操作符和一元操作符(只有一个操作数)的优先级关系比较特别:幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低:

>>> -3 ** 2
-9
>>> - (3 ** 2)
-9
>>> 3 ** -2
0.1111111111111111
>>> 3 ** (-2)
0.1111111111111111

******************

三、比较操作符

******************

比较操作符包括:<    <=    >    >=    ==    !=

比较操作符根据表达式的值的真假返回布尔类型的值。

******************

四、逻辑操作符

******************

 逻辑运算符包括: and    or    not

and :同真为真

or:同假为假

not :它的作用是得到一个和操作数相反的布尔类型的值

>>> not True
False
>>> not 0
True
>>> not 4
False
>>> 3 < 4 <5
True
>>> 3 < 4 and 4 < 5
True

在Python中,0解释为False,非0的数解释为True。

Python操作符优先级:

*******************************

五、课时06课后习题及答案

*******************************

 测试题:


0. Python 的 floor 除法现在使用 “//” 实现,那 3.0 // 2.0 您目测会显示什么内容呢?

如果回答是 1.5 那么很遗憾,您受到 C 语言的影响比较大,Python 这里会义无反顾地执行 floor 除法原则,答案是:1.0

猜测:
1.0

实际:
>>> 3.0 // 2.0
1.0


1. a < b < c 事实上是等于?

(a < b) and (b < c)

a < b and b < c and a < c

运行结果:
>>> 1 < 2 < 3
True
>>> 1 < 2 and 2 < 3 and 1 < 3
True

2. 不使用 IDLE,你可以轻松说出 5 ** -2 的值吗?

0.04,也就是 1/25
幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低。

5 ** (-2)

运行结果:
>>> 5 ** -2
0.04


3. 如何简单判断一个数是奇数还是偶数?

答: 使用求余可以简单得到答案:能被 2 整除为偶数,所以 x % 2 == 0,否则为奇数。

>>> 11 % 2 == 0
False
>>> 10 % 2 == 0
True


4. 请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9

如果你的回答是 0,那么小甲鱼很开心你中招了!
答案是:4
not or and 的优先级是不同的:not > and > or
我们按照优先级给它们加上括号:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
== 0 or 0 or 4 or 6 or 9
== 4
为啥是 4?
大家还记得第四讲作业提到的“短路逻辑”吗?3 and 4 == 4,而 3 or 4 == 3。
所以答案是:4
温馨提示:为了更好的表达你的程序,小甲鱼再次呼吁有些括号还是不能省下的,毕竟不是所有程序员都跟你一样都将优先级烂透于心的。

True


5. 还记得我们上节课那个求闰年的作业吗?如果还没有学到“求余”操作,还记得用什么方法可以“委曲求全”代替“%”的功能呢?

因为上节课我们还没有教大家“求余”的操作,所以小甲鱼使用了“if year/400 == int(year/400)”这样的方式来“委曲求全”。

动动手:

0. 请写一个程序打印出 0~100 所有的奇数。

代码:
for i in range(0,100):
    if i % 2 != 0:
        print(i)

运行结果:
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
37
39
41
43
45
47
49
51
53
55
57
59
61
63
65
67
69
71
73
75
77
79
81
83
85
87
89
91
93
95
97
99


1. 我们说过现在的 Python 可以计算很大很大的数据,但是……真正的大数据计算可是要靠刚刚的硬件滴,不妨写一个小代码,让你的计算机为之崩溃?

x = 100
while True:
print(x)
x *= 100


2. 爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。

题目:请编程求解该阶梯至少有多少阶?

x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag = 1
    else:
        x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
    i += 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')
代码:
i = 0
while True:
    if (i % 2 == 1) and (i % 3 == 2) and (i % 5 == 4) and (i % 6 == 5) and (i % 7 == 0):
        print('**********************')
        print('满足要求的楼梯数为:' + str(i))
        print('**********************')
        break
    else:
        print('不满足要求的楼梯数:' + str(i))
        i += 1

运行结果:
不满足要求的楼梯数:0
不满足要求的楼梯数:1
不满足要求的楼梯数:2
不满足要求的楼梯数:3
不满足要求的楼梯数:4
不满足要求的楼梯数:5
不满足要求的楼梯数:6
不满足要求的楼梯数:7
不满足要求的楼梯数:8
不满足要求的楼梯数:9
不满足要求的楼梯数:10
不满足要求的楼梯数:11
不满足要求的楼梯数:12
不满足要求的楼梯数:13
不满足要求的楼梯数:14
不满足要求的楼梯数:15
不满足要求的楼梯数:16
不满足要求的楼梯数:17
不满足要求的楼梯数:18
不满足要求的楼梯数:19
不满足要求的楼梯数:20
不满足要求的楼梯数:21
不满足要求的楼梯数:22
不满足要求的楼梯数:23
不满足要求的楼梯数:24
不满足要求的楼梯数:25
不满足要求的楼梯数:26
不满足要求的楼梯数:27
不满足要求的楼梯数:28
不满足要求的楼梯数:29
不满足要求的楼梯数:30
不满足要求的楼梯数:31
不满足要求的楼梯数:32
不满足要求的楼梯数:33
不满足要求的楼梯数:34
不满足要求的楼梯数:35
不满足要求的楼梯数:36
不满足要求的楼梯数:37
不满足要求的楼梯数:38
不满足要求的楼梯数:39
不满足要求的楼梯数:40
不满足要求的楼梯数:41
不满足要求的楼梯数:42
不满足要求的楼梯数:43
不满足要求的楼梯数:44
不满足要求的楼梯数:45
不满足要求的楼梯数:46
不满足要求的楼梯数:47
不满足要求的楼梯数:48
不满足要求的楼梯数:49
不满足要求的楼梯数:50
不满足要求的楼梯数:51
不满足要求的楼梯数:52
不满足要求的楼梯数:53
不满足要求的楼梯数:54
不满足要求的楼梯数:55
不满足要求的楼梯数:56
不满足要求的楼梯数:57
不满足要求的楼梯数:58
不满足要求的楼梯数:59
不满足要求的楼梯数:60
不满足要求的楼梯数:61
不满足要求的楼梯数:62
不满足要求的楼梯数:63
不满足要求的楼梯数:64
不满足要求的楼梯数:65
不满足要求的楼梯数:66
不满足要求的楼梯数:67
不满足要求的楼梯数:68
不满足要求的楼梯数:69
不满足要求的楼梯数:70
不满足要求的楼梯数:71
不满足要求的楼梯数:72
不满足要求的楼梯数:73
不满足要求的楼梯数:74
不满足要求的楼梯数:75
不满足要求的楼梯数:76
不满足要求的楼梯数:77
不满足要求的楼梯数:78
不满足要求的楼梯数:79
不满足要求的楼梯数:80
不满足要求的楼梯数:81
不满足要求的楼梯数:82
不满足要求的楼梯数:83
不满足要求的楼梯数:84
不满足要求的楼梯数:85
不满足要求的楼梯数:86
不满足要求的楼梯数:87
不满足要求的楼梯数:88
不满足要求的楼梯数:89
不满足要求的楼梯数:90
不满足要求的楼梯数:91
不满足要求的楼梯数:92
不满足要求的楼梯数:93
不满足要求的楼梯数:94
不满足要求的楼梯数:95
不满足要求的楼梯数:96
不满足要求的楼梯数:97
不满足要求的楼梯数:98
不满足要求的楼梯数:99
不满足要求的楼梯数:100
不满足要求的楼梯数:101
不满足要求的楼梯数:102
不满足要求的楼梯数:103
不满足要求的楼梯数:104
不满足要求的楼梯数:105
不满足要求的楼梯数:106
不满足要求的楼梯数:107
不满足要求的楼梯数:108
不满足要求的楼梯数:109
不满足要求的楼梯数:110
不满足要求的楼梯数:111
不满足要求的楼梯数:112
不满足要求的楼梯数:113
不满足要求的楼梯数:114
不满足要求的楼梯数:115
不满足要求的楼梯数:116
不满足要求的楼梯数:117
不满足要求的楼梯数:118
**********************
满足要求的楼梯数为:119
**********************

发表回复