一、铺一条路
1.1 面向过程铺路
- 水泥、沙子、搅拌
- 用多少搅拌多少
- 做了就直接用
- 把水泥铺到路面上

1.2. 面向函数铺路
1.2.1. 预制厂生产水泥砖
- 水泥、沙子、搅拌
- 提前生产水泥砖
- 生产出来了放着不用


1.2.2. 施工队铺路
- 施工队寻找预制厂
- 买现成的水泥砖
- 水泥、沙子、搅拌
- 把砖用水泥粘合到路面上

1.3.预制装配式住宅

二、计算机结构



3. 代码量对比
- 左边为面向过程编程
-
右边为面向函数编程
代码量对比
三、代码规范
3.1 定义语法
def add(a, b):
c = a+b
return c
代码 | 含义 |
---|---|
def | 函数代码块的关键字,“定义”的意思(define) |
add | 函数的名称,类似print(),用add()就可以调用 |
() | 圆括号必须有,里面放参数,参数可为空,表示不需要传任何数据 |
a | 申明一个变量,变量名为a,用来存传入的第1个数据 |
, | 逗号,多个参数用逗号分割,逗号后面+空格 |
b | 申明第二个变量,变量名为b,用来存传入的第2个数据 |
: | 冒号,函数内容以冒号起始,并且缩进。 |
return | [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。 |
空行 | 函数末尾,加空行 |
3.2 调用语法
sum = add(1,3)
代码 | 含义 |
---|---|
add | 调用add函数 |
() | 存放要输入的数据 |
, | 多个输入数据,用逗号分割 |
= | 赋值符,将add(1,3)的返回结果,赋值给变量 |
sum | 变量名,存放add(1,3)的返回结果 |
四、面向函数编程(预制厂)
1. 面向过程编程
age = int(input("请输入年龄:"))
nickname = ''
if age < 20:
nickname = '小奶狗'
elif age in range(20, 30):
nickname = '男神'
else:
nickname = '油腻大叔'
print("昵称:" + nickname)
五、debug单步调试
-
设置断点
设置断点
-
debug运行
debug模式运行
-
单步调试
单步调试
-
查看变量
查看变量值
六、函数的使用
6.1 在同一个.py文件内
def get_nick_name(age):
name = ''
if age < 20:
name = "小奶狗"
elif age in range(20,30):
name = '男神'
else:
name = '油腻大叔'
return name
name1 = get_nick_name(18)
print('结果:' + name1)
6.2 不在同一个.py文件内
- 新建python file,命名:tools.py
def get_nick_name(age):
name = ''
if age < 20:
name = "小奶狗"
elif age in range(20,30):
name = '男神'
else:
name = '油腻大叔'
return name
- 新建python file,命名:registry.py
from tools import *
nick_name = get_nick_name(18)
print('结果:' + nick_name)
from tools import *
代码 | 含义 |
---|---|
from | 从哪个模块(即.py文件) |
tools | 即tools.py模块 |
import | 导入 |
* | 代表所有函数(如果想导入指定函数,就写函数名) |
注意:import前,得先将代码所在文件夹标记为源文件查找路径,不然会提示函数不存在

二、技术基础
1. random模块
- import模块
- random静态对象
- random常用方法
建议使用 "import random" 风格而非 "from random import *"。这样可以保证随操作系统不同而有所变化的 os.open() 不会覆盖内置函数 open()。
import random
print(random.random()) # 0-1之间随机浮点数
print(random.randint(2,4)) # 随机整数,最小值、最大值
print(random.randrange(0,100,3)) # 指定范围随机整数,最小值、最大值、步幅
list = ['a','b','c',1,2,3]
print(random.choice(list)) # 从列表中随机选一个数
print(random.sample(list,3)) # 从列表中选一个子集,子集也是列表
random.shuffle(list) # 将列表随机打乱顺序
print(list)
执行结果:
0.6478421725433702
2
87
1
['c', 1, 3]
[1, 'b', 'a', 2, 3, 'c']
2. 语法简化
简化前
age = 30
mark = ''
if age > 18:
mark = '成年人'
else:
mark = '未成年人'
简化后
age = 30
mark = '成年人' if age >18 else '未成年人'
3. string字符对象
- string静态对象
- 小写字母ascii_lowercase
- 大写字母ascii_uppercase
- 字母ascii_letters(小写+大写)
- 数字digits
- 标点符号punctuation
- 可打印字符printable(字母+数字+标点符号)
import string
print('小写字母:'+string.ascii_lowercase)
print('大写字母:'+string.ascii_uppercase)
print('字母:'+string.ascii_letters)
print('数字:'+string.digits)
print('标点符号:'+string.punctuation)
print('可打印字符:'+string.printable)
打印结果
小写字母:abcdefghijklmnopqrstuvwxyz
大写字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ
字母:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
数字:0123456789
标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
可打印字符:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
4. 列表常见处理
序号 | 方法 | 用途 |
---|---|---|
1 | 扩展原列表(单值) | li.append('dd') |
2 | 扩展原列表(列表) | li.append(['kk,vv']) |
3 | 列表转换成字符串 | v1=''.join(li) |
4 | 统一列表元素类型 | list(map(str,li)) |
5 | 列表打乱顺序 | random.shuffle(pwd_list) |
6 | 清空列表 | list.clear() |
7 | 列表排序 | li.sort() |
8 | 列表翻转 | li.reverse() |
a) 列表打乱顺序
li = ['a','b','c','d']
print(li)
random.shuffle(li)
print(li)
执行结果
['a', 'b', 'c', 'd']
['a', 'c', 'd', 'b']
b) 扩展列表
扩展单个
li = ['a','b','c']
print(li)
li.extend('d')
print(li)
li.extend(['e','f'])
print(li)
执行结果
['a', 'b', 'c']
['a', 'b', 'c', 'd']
['a', 'b', 'c', 'd', 'e', 'f']
c) 列表转字符串:
无数字:
li = ['a','b','c']
print(li)
print(''.join(li))
有数字:
li = ['a','b','c',1,2,3]
print(li)
li2 = list(map(str,li))
print(li2)
print(''.join(li2))
d) 统一列表元素类型:
li = ['1','2','3',4,5,6]
print(li)
print(list(map(str,li)))
print(list(map(int,li)))
['1', '2', '3', 4, 5, 6]
['1', '2', '3', '4', '5', '6']
[1, 2, 3, 4, 5, 6]
5. 字符串截取
a) 字符串截取
str = '0123456789'
print(str[0:3]) #截取第一位到第三位的字符
print(str[:]) #截取字符串的全部字符
print(str[6:]) #截取第七个字符到结尾
print(str[:-3]) #截取从头开始到倒数第三个字符之前
print(str[2]) #截取第三个字符
print(str[-1]) #截取倒数第一个字符
print(str[::-1]) #创造一个与原字符串顺序相反的字符串
print(str[-3:-1]) #截取倒数第三位与倒数第一位之前的字符
print(str[-3:]) #截取倒数第三位到结尾
b) 数字左补0
随机生成4位数,如果小于4位,左补0
num = random.randint(0,9999)+10000
print(num)
print(str(num)[1:])
10039
0039
思路:
- 随机数+10的固定位数+1次方
- 转换成字符串,去掉最高位1
网友评论