Python之路,第十四篇:Python入门与基础14
python3 模块2
标准模块
随机模块random
假设导入 import random as R
函数:
R.random() 返回一个[0 ,1) 之间的随机数
R.getrandbits(nbit) 以长整型的形式返回用nbit未来表示的随机数;
R.uniform(a,b) 返回(a,b)区间内的随机数
R.randrange([start, ] stop [, step] ) 返回range(start, stop, step)中的随机数;
R.choice(seq) 从序列中返回随意元素;
R.shuffle(seq) 随机指定序列的顺序(乱序顺序)
R.sample(seq, n) 从序列中选择个随机且不重复的元素;
1 import random as R 2 R.random() 3 #0.9309907963621747 4 R.random() 5 #0.8932920124665744 6 R.random() 7 #0.12526503303205394 8 # 9 R.getrandbits(8)#二进制的数,2的8次方,0-255的随机数 10 #198 11 R.getrandbits(8) 12 #30 13 R.getrandbits(8) 14 #55 15 R.getrandbits(8) 16 #74 17 # 18 R.uniform(1,6) 19 5.491166696645943 20 R.uniform(1,6) 21 4.620897749534063 22 R.uniform(1,6) 23 3.4620999533669217 24 R.uniform(1,6) 25 4.590256968447636 26 R.uniform(1,6) 27 2.190289883881221 28 # 29 R.randrange(1,10,2) #从1到10,步长2,[1,3,5,7,9]中随机数 30 7 31 R.randrange(1,10,2) 32 1 33 R.randrange(1,10,2) 34 5 35 R.randrange(1,10,2) 36 1 37 # 38 L = [1,2,3,4,5,6,7,8,9] 39 print(R.choice(L)) 40 #9 #取L中的随机数 41 # 42 R.shuffle(L) 43 print(L) 44 #[4, 1, 8, 6, 7, 3, 2, 9, 5] 随机洗牌游戏 45 print(R.sample(L, 3)) 46 #[6, 9, 5] 随机3个不重复的数字;买彩票游戏
练习:
1 #猜数字游戏: 2 #随机生成一个0-100之间的整数,,, 3 import random as R 4 L = range(0,101) 5 x = R.choice(L) 6 #print(x) 7 L1 = [] 8 y = int(input("请输入一个数字y:")) 9 while True: 10 L1.append(y) 11 if y > x: 12 y = int(input("您猜的数大了,请重新输入y:")) 13 elif y < x: 14 y = int(input("您猜的数小了,请重新输入y:")) 15 else: 16 print("恭喜您猜对了!") 17 #print(L1) 18 print("您一共猜了 %d 个数。" % len(L1) ) 19 exit(0)
包(模块包)package
包的定义:包是将模块以文件夹的组织形式进行分组管理的方法;
包的作用:
1,将一系列模块进行分类管理,有利于防止名字冲突;
2,可以在需要时加载一个或部分模块而不是全部模块;
1 #例子 2 mypack/ 3 __init__.py 4 menu.py 5 games/ 6 __init__.py 7 contra.py 8 supermario.py 9 tanks.py 10 office/ 11 __init__.py 12 excel.py 13 world.py 14 powerpoint.py
包的加载:
import 包名 [as 包别名]
import 包名.模块名 [as 模块别名]
import 包名.子包名.模块名 [as 模块别名]
...
from 包名 import 模块名 [ as 模块新名 ]
from 包名.子包名 import 模块名 [ as 模块别名 ]
from 包名.模块名 import 变量名 [ as 变量别名 ]
from 包名 import *
from 包名.模块名 import
__all__ :用来记录哪些包需要导入
1,当用from 包 import * 语句导入模块时,只查找__all__中所列出的模块;
2,__all__属性只在from 包 import * 语句中起作用;
包的加载路径:
同模块相同,设置方法:
1,可以设置sys.path ; sys.path.append("/home/test/") 、 sys.path.append("C:\\test\")
2,可以设置PYTHONPATH环境变量;
在~/.bashrc 文件里最下面加入:
export PYTHONPATH=$PYTHONPATH:/home/test/
模块的加载过程:
编译 解释执行
menu.py ---> menu.pyc ---> python3
1 #\mypack>ls 2 __init__.py games menu.py 3 >>> import mypack 4 mypack包被加载了 5 >>> import mypack.menu 6 menu模块被加载了 7 >>> mypack.menu.show_menu() 8 +--------------+ 9 | 1) 游戏 | 10 | 2) 办公软件 | 11 +--------------+ 12 # 13 >>> from mypack import menu 14 mypack包被加载了 15 menu模块被加载了 16 >>> from mypack.games import contra 17 games 包被加载!... 18 contra包加载 19 >>> contra.play() 20 正在玩魂斗罗! 21 >>> dir() 22 ['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'contra', 'menu'] 23 >>> from mypack.menu import show_menu 24 >>> show_menu() 25 +--------------+ 26 | 1) 游戏 | 27 | 2) 办公软件 | 28 +--------------+ 29 >>> import mypack.menu as m 30 >>> m.show_menu() 31 +--------------+ 32 | 1) 游戏 | 33 | 2) 办公软件 | 34 +--------------+ 35 >>>
python 调试器 pdb模块
pdb是个模块, 主要用于调试程序;
作用: 1,让程序单步执行,并跟踪程序的执行流程;
2,在运行查看变量的值;
3,让程序控制程序的执行流程;
方法:
pdb.set_trace() 在此代码段进入调试器;
pdb调试命令:
q/quit 退出pdb调试器
l/list 列出源码
h/help 查看pdb帮助
p/pp 表达式 运行表达式并返回结果;
n/next 执行下一条语句;
c/contj/continue 继续执行,直到下一个断点;
b/break 断点位置 设置断点;
cl/clear 断点号 清除断点
s/step 进入到函数内部执行;
r/return 持续运行,直到此函数返回;
w/where 打印函数调用栈
r/run [命令行参数] 重新开始运行程序
pdb断点的设置方法:
1, 文件名 : 行号
(pdb) b test_pdb.py :10
2, 当前文件的行号
(pdb)b 20 #等同于b test_pdb.py : 20
3, 函数名;
(Pdb) b f1()
4, 模块.函数名
(Pdb) b contra.play
控制台下的pdb调试:
控制台下运行pdb 调试器的命令格式:
#python3 -m pdb xxx.py
(Pdb)
注:xxx.py 内不需要导入pdb模块和调用set_trace