|
and - or技巧
a="heaven"
b = "hell"
c = True and a or b
print(c)
d = False and a or b
print(d)
____________
输出:
heaven
hell
注意:
在一个bool and a or b语句中,当bool条件为真时,结果是a;当bool条件为假时,结果是b
有点类似于c/c++中的bool?a:b(可以对比这个来看)
and - or真正的技巧在于,确保a的值不会为夹。最常用的方式是使a成为[a]、b成为[b],然后使用返回值列表的第一个元素
由于[a]是一个非空列表,所以它决不会为假。即使a是0或者''或者其他假值,列表[a]也为真,因为他有一个元素
元组
元组(tuple)也是一种序列,和我们用了很多次的list类似,只是元组中的元素在创建之后就不能被修改。
数学运算
import math
math包里有两个常量:
math.pi
圆周率 π:3.141592...
math.e
自然常数:2.718281
数值运算:
math.ceil(x)
对x向上取整,比如x=1.2,返回2
math.floor(x)
对x向下取整,比如x=1.2,返回1
math.pow(x,y)
指数运算,得到x的y次方
math.log(x)
对数,默认基底为e。可以使用第二个参数,来改变对数的基底。比如 math.log(100,10)
math.sqrt(x)
平方根
math.fabs(x)
绝对值
三角函数:
math.sin(x)
math.cos(x)
math.tan(x)
math.asin(x)
math.acos(x)
math.atan(x)
注意:这里的x是以弧度为单位,所以计算角度的话,需要先换算
角度和弧度互换:
math.degrees(x)
弧度转角度
math.radians(x)
角度转弧度
真值表
为了便于看清,我们用<=>来表示等价关系。
<=>左边表示逻辑表达式,<=>右边表示它的结果。
NOT
not False <=> True
not True <=> False
(not 的结果与原值相反)
OR
True or False <=> True
True or True <=> True
False or True <=> True
False or False <=>False
(只要有一个值为True,or的结果就是True)
AND
True and False <=> False
True and True <=> True
False and True <=> False
False and False <=> False
(只要有一个值为False,and的结果就是False)
NOT OR
not(True or False)<=>False
not(True or True)<=>False
not(False or True)<=>False
not(False or False)<=>True
NOT AND
not(True and False)<=>True
not(True and True)<=>False
not(False and True)<=>True
not(False and False)<=>True
!=
1!=0 <=>True
1!=1 <=> Flase
0!=1 <=> True
0!=0 <=>False
==(这个恒等)
1==0 <=>False
1==1 <=> True
0==1 <=> False
0==0 <=> True
正则表达式
正则表达式就是记录文本规则的代码。
所以正则表达式并不是python中特有的功能,它是一种通用的方法。python中的正则表达式库,所做的事情是利用正则表达式来搜索文本。要使用它,你必须会自己用正则表达式来描述文本规则。
1、
首先说一种最简单的正则表达式,它没有特殊的符号,只有基本的字母或数字。它满足的匹配规则就是完全匹配。默认情况下正则表达式是严格区分大小写的。
2、
“\b”在正则表达式中表示单词的开头或结尾,空格、标点、换行都算是单词的分割。而“\b”自身又不会匹配任何字符,它代表的只是一个位置。所以单词前后的空格标点之类不会出现在结果中
3.
re.findall(r"hi",text)
re是python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。
最后再说一下[]这个符号。在正则表达式中,[]表示满足括号中任意字符。比如“[hi]”,它就不是匹配“hi”了,而是匹配“h”或者“i”
转义
r"hi"
这里字符串前面加了r,是raw的意思,它表示对字符串不进行转义。
4.
今天主要说两个符号"."和“*”,顺带说下"\S"和"?"
"."在正则表达式中表示除换行符以外的任意字符。
与“.”类似的一个符号是"\S",它表示的是不是空白符的任意字符。注意是大写字符S.
5.
在很多搜索中,会用"?"表示任意一个字符,“*”表示任意数量连接字符,这种被称为通配符。但在正则表达式中任意字符使用"."表示,
而"*"则不是表示字符,而是表示数量:它表示前面的字符可以重复任意多次(包括0次)只要满足这样的条件,都会被表达式匹配上。
这是因为"*"在匹配时,会匹配尽可能长的结果。如果你想让他匹配到最短的就停止,需要用".*?".如果“i.*?”,就会得到第二种结果。这种匹配方式被称为懒惰匹配,而原本尽可能长的方式被称为贪婪匹配。
从下面一段文本中,匹配出所有s开头,e结尾的单词。
text=site sea sue sweet see case sse ssee loses
re.findall("s.*?e",text)
表示数字的方法:
\d
要表示任意长度的数字,就可以用[0-9]*或者\d*
但要注意的是:*表示的任意长度包括0,也就是没有数字的空字符也会被匹配出来,一个与*类似的符合+,表示的则是1个或更长。
所以要匹配出所有数字串,应当用[0-9]+或者\d+
如果要限定长度,就用{}代替+,大括号里协商你想要的长度。比如11位的数字:\d{11}
想要把第一位限定为1,就在前面加上1,后面去掉一位: 1\d{10}
具有特殊意义的专用字符被称作“元字符”。常用的元字符还有:
\w:匹配字母或数字或下划线或汉字
\s:匹配任意的空白符
^:匹配字符串的开始
$:匹配字符串的结束
\S其实就是\s的反义,任意不是空白符的字符。
\W:匹配任意不是字母、数字、下划线、汉字的字符
\D:匹配任意非数字的字符
\B:匹配不是单词开头或结束的位置
[a]的反义是[^a],表示除a以外的任意字符。[^abcd]就是除abcd以外的任意字符。
之前我们用过*、+、{}来表示字符的重复。其他重复的方式还有:
?:重复零次或一次
{n,}:重复n次或更多次
{n,m}:重复n到m次
\d{15,18}:表示15到18位的数字,可以用来检测身份证号码
^1\d*[x]?
以1开头的一串数字,数字结尾有字母X,也可以没有。有的话带上X
随机数
random.randint(a,b)可以生成一个a到b间的随机整数,包括a和b
a、b都必须是整数,且必须b>=a。当等于的时候,比如:
random.randint(3,3)结果永远是3
random.random():生成一个0到1之间的随机浮点数,包括0但不包括1,也就是[0.0,1.0)
random.uniform(a,b):生成a、b之间的随机浮点数。不过与randint不同的是,a、b无需是整数,也不用考虑大小
random.choice(seq):从序列中随机选取一个元素。seq需要是一个序列,比如list、元组、字符串。
random.choice([1,2,5,8,13]) #list
random.choice('hello') #字符串
random.choice(['hello','world']) #字符串组成的list
random.choice((1,2,3)) #元组
random.randrange(start,stop,step)
生成一个从start到stop(不包括stop),间隔为step的一个随机数。start、stop、step都要为整数,且start<stop
random.randrange(1,9,2):就是从[1,3,5,7]中随机选取一个。
start 和step都可以不提供参数,默认是从0开始,间隔为1。但如果需要指定step,则必须指定start。
random.randrange(4) #[0,1,2,3]
random.randrange(1,4) #[1,2,3]
random.randrange(start,stop,step) 其实在效果上等同于上面
random.choice(range(start,stop,step))
random.sample(population,k) 从population序列中,随机获取k个元素,生成一个新序列。sample不改变原来序列。
random.shuffle(x) 把序列x中的元素顺序打乱。shuffle直接改变原有的序列。
以上是random中常用的几个方法。如果你在程序中需要其中某一个方法,也可以这样写:
from random import randint
randint(1,10)
另外,有些编程基础的同学可能知道,在随机数中有个seed的概念,需要一个真实的随机数,比如此刻的时间、鼠标的位置等等,以此为基础产生伪随机数。在python中默认用系统时间作为seed。你也可以手动调用random.seed(x)来指定seed。