赞
踩
1. 请问下面表达式的值是什么?
>>> 3 == not 5
会报错。由于 not 运算符的优先级比 ==
运算符低,所以表达式是先运算 ==
的,即先求出 3 == not 的结果,很明显,Python 彼时很懵逼。
2. 请问下面表达式的值是什么?
>>> 3 or 5 and 0
3。由于 or 运算符的优先级比 and 运算符低,所以表达式的运算顺序是 3 or (5 and 0),即 3 or 0,结果为 3。
3. 请问下面表达式的值是什么?
>>> 3 and 5 + True or False
6。这里应该先考虑运算符优先级,加号(+)的优先级比逻辑运算符的优先级高,所以先运算加法,即3 and (5 + True) or False
。
当 True 参数运算时,将当作数字 1 来使用,所以结果是 3 and 6 or False
。
接着基于短路逻辑(从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值),所以 3 and 6
的结果为 6。同样的道理,基于短路逻辑,6 or False
第一个操作数的值可以确定逻辑运算的结果,因此最终结果是 6。
4. 请问下面表达式的值是什么?
>>> 0 and not 1 or not 2 and 3 or 4 and not 5
False。
这个表达式中,not 运算符的优先级最高,所以表达式变成0 and False or False and 3 or 4 and False
。接下来 and 运算符的优先级比 or 要高,所以先计算 and,结果如下0 or False or False
基于“短路逻辑”,结果为 False。
5. 请问下面表达式的值是什么?
>>> 1 == 2 < 3
False。
注意,这个链式比较,拆出来是1 == 2 and 2 < 3
,而不是先1 == (2 < 3)
.得到的是两个截然不同的结果。
6. 请将下面的链式比较转换为使用 and 的普通比较。
>>> 1 < 2 > 3 < 4 < 5
1<2 and 2>3 and 3<4 and 4<5
固然链式比较有更容易辨识、更方便输入的优势,但如果“链子”拉太长,还是容易掉的。这时候,使用传统的普通比较拼接,代码会更容易阅读。
7. 爱因斯坦曾出过这样一道有趣的数学题:
有一个长阶梯,若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶;只有每步上 7 阶,最后刚好一阶也不剩。
求解该阶梯的最终数量?
steps = 7 i = 1 FIND = False while i < 100: if (steps%2==1)and(steps%3==2)and(steps%5==4)and(steps%6==5): FIND = True break else: steps = 7 + 7*i i = i + 1 if FIND == True: print('阶梯数是:', steps) else: print('在程序限定的范围内找不到答案!')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。