鱼C论坛

 找回密码
 立即注册

python学习小菜笔记——第六课(Pyhon之常用操作符 )

已有 673 次阅读2014-8-10 15:04 |个人分类:Python学习


    



课堂笔记:
   


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.运算符优先级问题

Python之操作符优先级


注意:幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操优先级作符低


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)

  1. i = 0
  2. while i <= 100:
  3.     if i % 2 != 0:
  4.         print(i, end=' ')
  5.         i += 1
  6.     else:
  7.         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

  1. x = 7
  2. i = 1
  3. flag = 0

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

  10. if flag == 1:
  11.     print('阶梯数是:', x)
  12. else:
  13.     print('在程序限定的范围内找不到答案!')


我写的好粗糙地说~~~


课后补充:


Stackless:CPython的一个局限就是每个Python函数调用都会产生一个C函数调用。 这意味着同时产生的函数调用是有限制的,因此Python难以实现用户级的线程库和复杂递归应用。一旦超越这个限制,程序就会崩溃。Stackless的Python实现突破了这个限制,一个C栈帧可以拥有任意数量的Python栈帧。这样你就能够拥有几乎无穷的函数调用,并能支持巨大数量的线程。Stackless唯一的问题就是它要对现有的CPython解释器做重大修改。所以它几乎是一个独立的分支。另一个名为Greenlets的项目也支持微线程。它是一个标准的C扩展,因此不需要对标准Python解释器做任何修改。



路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-16 06:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部