Python学习日记 Day3-运算优先级、Math库、字符串处理

   这两天忙着去核酸检测点帮忙了,故今天才更新,而不是我偷懒!!

运算优先级

1.先运算两个3**2,于是变成30-9+8//9*10,然后就是简单的四则运算。//的优先级和*、/一样。结果是21

2.%的优先级和*、/、//一样。于是变成3*16/8%5,结果是1.0(陷阱!结果变成浮点数了,不是1)

3.涉及到结合性的问题,Python 中大部分运算符都具有左结合性,也就是从左到右执行;只有 ** 乘方运算符、单目运算符(例如 not 逻辑非运算符)、赋值运算符和三目运算符例外,它们具有右结合性,也就是从右向左执行。于是先计算2**3,再计算2**8,结果是256

4.4j看成0+4j,于是变成(10j-5)/2,结果是-2.5+5j。

(复数乘法:设z1=a+bi,z2=c+di是任意两个复数,则它们的和是 (a+bi)+(c+di)=(a+c)+(b+d)i)

(复数除以实数:实部虚部同时除)

表 1 Python 运算符优先级和结合性一览表
运算符说明Python运算符优先级结合性优先级顺序
小括号( )19
︿
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 |
 | 
 |
 |
索引运算符x[i] 或 x[i1: i2 [:i3]]18
属性访问x.attribute17
乘方**16
按位取反~15
符号运算符+(正号)、-(负号)14
乘除*、/、//、%13
加减+、-12
位移>>、<<11
按位与&10
按位异或^9
按位或|8
比较运算符==、!=、>、>=、<、<= 7
is 运算符is、is not6
in 运算符in、not in5
逻辑非not4
逻辑与and3
逻辑或or2
逗号运算符exp1, exp21

(表格来源:Python运算符优先级和结合性一览表 (biancheng.net)

凯撒密码

  这题看着简单,就是一个将输入字母转化为unicode码一通操作后再转回字母并输出。一般想到的思路都是分为a-w、x-z两类处理。但是书上例题没有分类处理,原理是考虑到字母加密方式是相对的,即无关字母本身的unicode码。为了防止xyz加密后溢出成小写字母以外的符号,所以采用计算和字母a之间的距离来保证ord(p)-ord('a')+3)%26中unicode的取值范围在0-25,ord('a')+25刚好对应字母表最后一个字母从而实现目的。

  另:书上例题不完全,原题是要求特殊字符不转换处理,怪不得我else那行看了半天。

  Note:Python用的是Unicode码,只占一个字节。C语言用的是ASCII码,中2英1.

plaincode=input('请输入明文')
for p in plaincode: #字符串遍历
    if ord('a')<=ord(p)<=ord('z'):
        p=chr(ord('a')+(ord(p)-ord('a')+3)%26) #算出与字母a的距离,即Unicode码差。保证xyz转换时不会溢出
        print(p,end=' ')
    else:
        print(p)

字符串处理

s代表字符串名 e.g s=‘helloworld’

1.s.[::3]表示切片范围从字符串头到尾且步长为3,结果为hlod

2.s.find('l')表示字符串中出现l的次数,并返回数字,未发现返回-1

3.s.split(' ')表示以空格为分隔符,将前后字符串切片成数组。

字符串大小比较

先比较第一个字母的Unicode值,如果相等, 就比较第二个,以此类推,直到比出位置。

1.‘abcd’>'ab'

2.'acd'>'abd'

3.''<'a' 此时''中有一个字符串结束标记'\0',Unicode编码是0.(类似的'a'中实际由字符a和'\0'组成)

字符串格式化

print("{:>15s}:{:<8.2f}".format('Length',23.87501))
         Length:23.88   

>15s代表字符串宽度为15,右对齐;<8.2f代表浮点数宽度8,左对齐,保留两位小数

进度条设计

1.第一次调用time.clock()开始计时,第二次调用计算两次时间差,单位为秒,一般是负数,所以输出时在变量前加个符号。

2.用end=''和\r实现单行刷新,但是IDLE自动屏蔽单行刷新。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值