Python学习笔记03

it2022-05-08  6

判断python字典中key是否存在的两种方法

使用自带函数实现

python的字典的属性方法里面有一个has_key()方法,可以直接判断字典中是否有某个key

>>> dic = {"name":"duanmuxu", "sex":"male"} >>> dic.has_key("name") True >>> dic.has_key("address") False

in方法做判断

>>> dic = {"name":"duanmuxu", "sex":"male"} >>> "name" in dic.keys() True >>> "address" in dic.keys() False

同理,not in 方法也可做判断

>>> dic = {"name":"duanmuxu", "sex":"male"} >>> "name" not in dic.keys() False >>> "address" not in dic.keys() True

input()和raw_input()的区别

版本差异

Python2.X 中input()和raw_input()都可使用Python3.X 中只能使用input(),raw_input()已经与input()结合了

输入格式差异

以下代码使用Python2.X版本实现

raw_input()
>>> name= raw_input('输入姓名:') 输入姓名:duanmuxu >>> name 'duanmuxu' >>> type(name) <type 'str'> >>> age= raw_input('输入年龄:') 输入年龄:21 >>> age '21' >>> type(age) <type 'str'>

对于任何类型的数据都是直接输入,返回一个字符串类型的变量

input()
>>> name= input('输入姓名:') 输入姓名:duanmuxu Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> NameError: name 'duanmuxu' is not defined >>> name= input('输入姓名:') 输入姓名:'duanmuxu' >>> name 'duanmuxu' >>> type(name) <type 'str'> >>> age= input('输入年龄:') 输入年龄:21 >>> age 21 >>> type(age) <type 'int'>

需要根据输入数据的类型进行输入,字符串型数据输入时加上 ’ ',数字就是数字

使用场景

输入的类型为字符的时候可以用raw_input(),当然不怕麻烦也可以用input()手动加引号

int类型的时候最好用input()

Python 随机数函数

随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。

choice() 函数

描述

choice() 方法返回一个列表,元组或字符串的随机项。

使用
import random random.choice(seq) # seq -- 可以是一个列表,元组或字符串。
实例
#!/usr/bin/env python import random print "choice([1, 2, 'a', 'b']) : ", random.choice([1, 2, 'a', 'b']) print "choice('String') : ", random.choice('String') # 输出: choice([1, 2, 'a', 'b']) : a choice('String') : S

randrange() 函数

描述

randrange() 方法返回指定递增基数集合中的一个随机数,基数缺省值为1。

使用
import random random.randrange ([start,] stop [,step]) start – 指定范围内的开始值,包含在范围内。stop – 指定范围内的结束值,不包含在范围内。step – 指定递增基数。
实例
#!/usr/bin/env python #-*- coding:utf-8 -*- import random # 输出 100 <= number < 1000 间的偶数 print "randrange(100, 1000, 2) : ", random.randrange(100, 1000, 2) # 输出 100 <= number < 1000 间的其他数 print "randrange(100, 1000, 3) : ", random.randrange(100, 1000, 3) # 输出: randrange(100, 1000, 2) : 762 randrange(100, 1000, 3) : 532

random() 函数

描述

random() 方法返回随机生成的一个实数,它在**[0,1)**范围内。

使用
import random random.random()
实例
#!/usr/bin/env python #-*- coding:utf-8 -*- import random for i in range(0, 3): print "第%s个随机数:" %(i+1) , random.random() # 输出: 第1个随机数: 0.683753845699 第2个随机数: 0.146315223384 第3个随机数: 0.328288508196

seed() 函数

描述

seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。

Random初始化的时候,可以以一个INT32作为参数,称为seed,MSDN上的解释是:“伪随机数是以相同的概率从一组有限的数字中选取的…随机数的生成是从种子值开始…”

也就是说,当seed的值设为一样时,所产生的随机数也是相同的。

使用
import random random.seed ( [x] )

x – 改变随机数生成器的种子seed。

实例
#!/usr/bin/env python #-*- coding:utf-8 -*- import random for i in range(0, 3): random.seed(5) print "第%s个随机数:" %(i+1) , random.random() # 输出: 第1个随机数: 0.62290169489 第2个随机数: 0.62290169489 第3个随机数: 0.62290169489

shuffle() 函数

描述

shuffle() 方法将序列的所有元素随机排序。

使用
import random random.shuffle (lst )

lst – 可以是一个列表。

实例
#!/usr/bin/env python #-*- coding:utf-8 -*- import random li = [1, 2, 3, 4, 5] for i in range(1, 4): random.shuffle(li) print "第%s次随机排序列表,结果是:" %i , li # 输出: 第1次随机排序列表,结果是: [4, 1, 2, 3, 5] 第2次随机排序列表,结果是: [4, 3, 2, 5, 1] 第3次随机排序列表,结果是: [1, 3, 4, 5, 2]

uniform() 函数

描述

uniform() 方法将随机生成下一个实数,它在 [x, y] 范围内。

使用
import random random.uniform(x, y) x – 随机数的最小值,包含该值。y – 随机数的最大值,不包含该值。返回一个浮点数 N,取值范围为如果 x<y 则 x <= N < y,如果 y<x 则y <= N < x。
实例
#!/usr/bin/env python #-*- coding:utf-8 -*- import random print "uniform(3, 6)生成的随机数为:",random.uniform(3, 6) # 输出 uniform(3, 6)生成的随机数为: 3.71157971278

r/R 打印原始字符串

有时候字符串中带有 \n 、 \t 等特殊字符,会被识别成特殊操作而不被输出。此时在字符串前加上 r/R 即可打印原始字符串

>>> print "原始字符串\n" 原始字符串 >>> print r"原始字符串\n" 原始字符串\n >>> print R"原始字符串\n" 原始字符串\n

三引号(triple quotes)

python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。

HTML_wd = ''' <HTML><HEAD><TITLE> Friends CGI Demo</TITLE></HEAD> <BODY><H3>ERROR</H3> <B>%s</B><P> <FORM><INPUT TYPE=button VALUE=Back ONCLICK="window.history.back()"></FORM> </BODY></HTML> ''' print HTML_wd # 输出: <HTML><HEAD><TITLE> Friends CGI Demo</TITLE></HEAD> <BODY><H3>ERROR</H3> <B>%s</B><P> <FORM><INPUT TYPE=button VALUE=Back ONCLICK="window.history.back()"></FORM> </BODY></HTML>

所见即所得

直接赋值(=)、浅拷贝(copy)和深度拷贝(deepcopy)

直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

直接上例子

#!/usr/bin/env python # -*-coding:utf-8 -*- import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy.deepcopy(a) #对象拷贝,深拷贝 a.append(5) #修改对象a a[4].append('c') #修改对象a中的['a', 'b']数组对象 print( 'a = ', a ) print( 'b = ', b ) print( 'c = ', c ) print( 'd = ', d ) # 输出: ('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5]) ('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5]) ('c = ', [1, 2, 3, 4, ['a', 'b', 'c']]) ('d = ', [1, 2, 3, 4, ['a', 'b']]) b = a: 赋值引用,a 和 b 都指向同一个对象。b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

最新回复(0)