课堂笔记:
1.算数操作符
| 运算符 | 说明 | 举例 |
|---|
| + (加号) | 两个对象相加。 | 3 + 5 得 8. 'a' + 'b' 得 'ab'。 |
| - (减号) | 给出一个数减去另一数的差;如果缺少第一个操作数,它默认为是0。 | -5.2 得到一个负数,50 - 24 得 26。 |
| * (乘法) | 给出两个数的乘积或返回重复多次的字符串。 | 2 * 3 得 6. 'la' * 3 得到 'lalala'。 |
| ** (幂) | 返回x的y次幂。 | 3 ** 4 得 81 (也就是3*3*3*3)。 |
| / (除法) | 用y分x(x除以y)。 | 4 / 3 得1.3333333333333333。 |
| // (整除) | 得到除法的商。 | 4 // 3 得 1。 |
| % (取模) | 返回除法的余数。 | 8 % 3 得 2. -25.5 % 2.25 得 1.5。 |
(+=,-=,*=,/=)
a = a+3
a+=3
2.运算符优先级问题
注意:幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操优先级作符低
3比较操作符
| < (小于) | 返回x是否小于y。所有的比较运算符返回True或False。注意这些名字的大小写。 | 5 < 3 返回 False,而 3< 5 返回 True。 比较运算符可以任意连接:3 < 5 < 7 返回 True。 |
| > (大于) | 返回x是否大于y。 | 5 >3 返回 True。如果操作对象都是数字,它们首先转换为普通型,否则,将返回False。 |
| <= (小于等于) | 返回x是否小于等于y。 | x = 3; y = 6; x <= y 返回 True。 |
| >= (大于等于) | 返回x是否大于等于y。 | x = 4; y = 3; x >= 3 返回 True。 |
| == (等于) | 比较操作对象是否相等。 | - x = 2; y = 2; x == y 返回 True。
- x = 'str'; y = 'stR'; x == y 返回 False。
- x = 'str'; y = 'str'; x == y 返回 True。
|
| != (不等于) | 比较操作对象是否不相等。 | x = 2; y = 3; x != y 返回 True。 |
4.逻辑操作符
| not (逻辑非) | 如果 x 是 True,它返回 False。如果 x 是 False,它返回 True。 | x = True; not x 返回 False。 |
| and (逻辑与) | 如果x是False,x and y 返回 False,否则它返回y的值。 | x = False; y = True; x and y 返回 False,因为 x 为假。在这种情况下,Python将不计 算 y,因为它知道and左边表达式是 False ,这意味着整个表达式将为 False , 而不论其它值为什么。这叫做求值捷径。 |
| or (逻辑或) | 如果 x 为 True, 它返回真,否则它返回y的值。 | x = True; y = False; x or y 返回 True。求值捷径这也适用。
|
测试题:
0. Python 的 floor 除法现在使用 “//” 实现,那 3.0 // 2.0 您目测会显示什么内容呢?
1
如果回答是 1.5 那么很遗憾,您受到 C 语言的影响比较大,Python 这里会义无反顾地执行 floor 除法原则,答案是:1.0
1. a < b < c 事实上是等于?
a<b and b<c
(a < b) and (b < c)
2. 不使用 IDLE,你可以轻松说出 5 ** -2 的值吗?
0.25
0.04,也就是 1/25
幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低。完蛋了,看来我的数学是音乐老师教的
3. 如何简单判断一个数是奇数还是偶数?
能否被2整除
使用求余可以简单得到答案:能被 2 整除为偶数,所以 x % 2 == 0,否则为奇数。
4. 请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
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
温馨提示:为了更好的表达你的程序,小甲鱼再次呼吁有些括号还是不能省下的,毕竟不是所有程序员都跟你一样都将优先级烂透于心的。
我不知道我是怎么在梦中算出9的
5. 还记得我们上节课那个求闰年的作业吗?如果还没有学到“求余”操作,还记得用什么方法可以“委曲求全”代替“%”的功能呢? if year/400 == int(year/400): print(temp + ' 是闰年!')动动手:0. 请写一个程序打印出 0~100 所有的奇数。for i in range(100):
if(i%2)==0:
print(i)
- i = 0
- while i <= 100:
- if i % 2 != 0:
- print(i, end=' ')
- i += 1
- else:
- i += 1
1. 我们说过现在的 Python 可以计算很大很大的数据,但是......真正的大数据计算可是要靠刚刚的硬件滴,不妨写一个小代码,让你的计算机为之崩溃? 额~~~这个。。。
print(2 ** 2 ** 32)
# 一般很多机子都会在一会儿之后:Memory Overflow,内存不够用。
# 设计到幂操作,结果都是惊人滴。
2. 爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。题目:请编程求解该阶梯至少有多少阶?for i in range(1000):
if(i%2)==1:
if(i%3)==2:
if(i%5)==4:
if(i%6)==5:
if(i%7)==0:
print(i)
>>>119
329
539
749
959
- 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('在程序限定的范围内找不到答案!')
我写的好粗糙地说~~~
课后补充:
Stackless:CPython的一个局限就是每个Python函数调用都会产生一个C函数调用。 这意味着同时产生的函数调用是有限制的,因此Python难以实现用户级的线程库和复杂递归应用。一旦超越这个限制,程序就会崩溃。Stackless的Python实现突破了这个限制,一个C栈帧可以拥有任意数量的Python栈帧。这样你就能够拥有几乎无穷的函数调用,并能支持巨大数量的线程。Stackless唯一的问题就是它要对现有的CPython解释器做重大修改。所以它几乎是一个独立的分支。另一个名为Greenlets的项目也支持微线程。它是一个标准的C扩展,因此不需要对标准Python解释器做任何修改。