课程导学
Python基本语法元素
缩进、注释、命名、变量、保留字
数据类型、字符串、整数、浮点数、列表
赋值语句、分支语句、函数
input()、print()、eval()、print()格式化
Python基本图形绘制
从计算机技术演进角度看待python语言
海龟绘图体系及import保留字用法
penup()、pendown()、pensize()、pencolor()
fd()、circle()、seth()
循环语句:for和in、range()函数
基本数据类型
数据类型:整数、浮点数、复数
数据类型运算操作符、运算函数
字符串类型:表示、索引、切片
字符串操作符、处理函数、处理方法、.format()格式化
time库:time()、strftime()、strptime()、sleep()等
保留字
and elif import raise global
as else in return nonlacal
assert except is try true
break finally lambda while false
class for not with none
continue from or yield
def if pass del
#TempConvert.py
python蟒蛇绘制
4.1 程序的分支结构
顺序结构
分支结构
循环结构
4.2 实例5:身体质量指数BMI
4.3 程序的循环结构
4.4 模块3:random库的使用
4.5 实例6:圆周率的计算
单分支结构
根据判断条件结果判断而选择不同向前路径的运行方式
单分支结构
单分支示例
guess = eval(input())
if guess == 99:
print("猜对了")
if True:
print("条件正确")
二分支结构
根据判断条件结果判断而选择不同向前路径的运行方式
二分支结构
二分支示例
guess = eval(input())
if guess == 99:
print("猜对了")
else:
print("猜错了")
if True:
print("语句块1")
else:
print("语句块2")
紧凑形式:适用于简单表达式的二分支结构
<表达式1>if<条件>else<表达式2>
guess = eval(input())
print("猜{}了".format("对" if guess == 99 else "错"))
多分支结构
#对不同的分数分级的问题
score = eval(input())
if score >= 60:
grade = "D"
elif score >= 70:
grade = "C"
elif score >= 80:
grade = "B"
elif score >= 90:
grade = "A"
print("输入成绩属于级别{}".format(grade))
以上程序未注意多条件之间的包含关系
注意变量取值范围的覆盖
需要继续修改
条件判断及组合
条件组合
用于条件组合的三个保留字
操作符及使用以及描述
x and y 两个条件x和y的逻辑与
x or y 两个条件x和y的逻辑或
not x 条件x的逻辑非
条件判断及组合
示例
guess = eval(input(())
if guess > 99 or guess < 99:
print("猜错了")
else:
print("猜对了")
if not true
print("语句块2")
else:
print("语句块1")
程序的异常处理
num = eval(input(“请输入一个整数”))
print(num**2)
当用户没有输入整数时,会产生异常处理,怎么处理?
异常处理
异常处理的基本使用
try :
<语句块1>
except :
<语句块2>
try :
<语句块1>
except <异常类型>:
<语句块2>
示例1
try :
num = eval(input("请输入一个整数:"))
print(num**2)
except :
print("输入不是整数")
try :
num = eval(input("请输入一个整数:"))
print(num**2)
except NameError:
print("输入不是整数")
标注异常类型后,仅响应异常
异常类型名字等同于变量
异常处理
异常处理的高级使用
try:
<语句块1>
except :
<语句块2>
else:
<语句块3>
finally:
<语句块4>
finally对应语句块4一定执行
else对应语句块3在不发生异常时执行
程序的控制结构
单分支 if 二分支 if-else 及紧凑形式
多分支 if-elif-else 及条件之间关系
not and or > >= == <= < !=
异常处理 try-except-else-finally
实例5:身体质量指数BMI
BMI:对身体质量的刻画
Body Mass Index
国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析
定义:BMI = 体重(kg)/身高的平方(M^2)
身体质量指数BMI
问题需求
输入:给定体重和身高值
输出:BMI指标分类信息(国际和国内)
#CalBMIv1.py
height,weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]:"))
bmi = weight / pow(height,2)
print("BMI 数值为:{:.2f}".format(bmi))
who = ""
if bmi < 18.5:
who = "偏瘦"
elif 18.5 <= bmi < 25:
who = "正常"
elif 25 <= bmi <30:
who = "偏胖"
else:
who = "肥胖"
print("BMI指标为:国际'{0}'".format(who))
#CalBMIv3.py
height,weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]:"))
bmi = weight / pow(height,2)
print("BMI 数值为:{:.2f}".format(bmi))
who,nat = "",""
if bmi < 18.5:
who,nat = "偏瘦","偏瘦"
elif 18.5 <= bmi < 24:
who,nat = "正常","正常"
elif 24 <= bmi < 25:
who,nat = "正常","偏胖"
elif 25 <= bmi < 28:
who,nat = "偏胖","偏胖"
elif 28 <= bmi < 30:
who,nat = "偏胖","肥胖"
4.3程序的循环结构
遍历循环
遍历某个结构形成的循环运行方式
for <循环变量> in <循环结构>
<语句块>
由保留字for和in组成,完整遍历所有元素后结束
每次循环,所获得元素放入循环变量,并执行一次语句块
计数循环(N次)
for i in range(N):
<语句块>
遍历由range()函数产生的数字序列,产生循环
遍历循环的应用
计数循环(N次)
>>> for i in range(5):
print(i)
0
1
2
3
4
>>> for i in range(5):
print("Hello:",i)
Hello: 0
Hello: 1
Hello: 2
Hello: 3
Hello: 4
计数循环(N次)
for i in range(M,N,K):
<语句块>
遍历由range()函数产生的数字序列,产生循环;从M开始,不到N为止,步长为K,
遍历循环的应用
计数循环(特定次)
>>> for i in range(1,6):
print(i)
1
2
3
4
5
>>> for i in range(1,6,2):
print("Hello:",i)
Hello: 1
Hello: 3
Hello: 5
字符串遍历循环
for c in s:
<语句块>
s是字符串,遍历字符串每个字符,产生循环
遍历循环的应用
字符串遍历循环
>>> for c in "Python123":
print(c,end=",")
P,y,t,h,o,n,1,2,3,
列表遍历循环的应用
列表遍历循环
for item in ls:
<语句块>
ls是一个列表,遍历其每个元素,产生循环
列表遍历循环
>>> for item in [123,"PY",456]:
print(item,end=",")
123,PY,456,
文件遍历循环
for line in fi :
<语句块>
fi是一个文件标识符,遍历其每行,产生循环
遍历循环
文件遍历循环
>>>for line in fi:
print(line)
优美胜于丑陋
明了胜于隐晦
简洁胜于复杂
for <循环变量> in <遍历结构>:
<语句块>
计数循环(N次)
计数循环(特定次)
字符串遍历循环
列表遍历循环
文件遍历循环
无限循环
由条件控制的循环运行方式
while <条件>:
<语句块>
反复执行语句块,直到条件不满足时结束
无线循环的应用
>>> a = 3
>>> while a>0:
a = a-1
print(a)
2
1
0
>>> a = 3
>>> while a>0:
a = a+1
print(a)
4
5
6
7
8
9
...#按CTRL+C退出执行
循环控制保留字
break和continue
break跳出并结束定当前整个循环,执行循环后的语句
continue结束当次循环,继续执行后续次数循环
break和continue可以与for和while循环搭配使用
循环控制保留字
break和continue
>>> for c in "PYTHON":
if c == "T":
continue
print(c,end = "")
PYHON
>>> for c in "PYTHON":
if c == "T":
break
print(c,end = "")
PY
>>> s = "PYTHON"
>>> while s !="":
for c in s:
print(c,end = "")
s = s[:-1]
PYTHONPYTHOPYTHPYTPYP
>>> s = "PYTHON"
>>> while s !="":
for c in s:
if c == "T":
break
print(c,end = "")
s = s[:-1]
PYPYPYPYPYP
循环的扩展
循环与else
for <循环变量> in <遍历结构> :
<语句块1>
else :
<语句块2>
while <条件> :
<语句块1>
else:
<语句块2>
循环的扩展
循环与else
当循环没有被break语句退出的时候,执行else语句块
else语句块作为正常完成循环的奖励
这里else的用法与异常处理中else用法相似
>>> for c in "PYTHON":
if c == "T":
continue
print(c,end = "")
else:
print("正常退出")
PYHON正常退出
>>> for c in "PYTHON":
if c == "T":
break
print(c,end = "")
else:
print("正常退出")
PY
循环的高级用法
单元小结
程序循环的结构
for … in 遍历循环:计数、字符串、列表、文件…
while无限循环
continue和break保留字:退出当前循环层次
循环else的高级用法:与break有关
random库基本介绍
random库是使用随机数的python标准库
伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
random库主要用于生成随机数
使用random库: import random
random 库包括两类函数,常用共8个
基本随机数函数:seed(),random()
扩展随机数函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
基本随机数函数
随机数种子
基本随机数函数
seed(a = None) 初始化给定的随机数种子,默认为当前系统时间
>>>random.seed(10) #产生种子10对应的序列
random() 生成一个[0.0,1.0)之间的随机小数
>>> random.random()
0.5266039791113609
扩展随机数函数
random()
randint() randrange() choice() getrandbits() shuffle() uniform()
函数的详细描述
randint(a,b) 生成一个[a,b]之间的整数
>>> import random
>>> random.randint(10,100)
26
randrange(m,n[,k]) 生成一个[m,n)之间以k为步长的随机整数
>>> random.randrange(10,100,10)
90
getrandbits(k) 生成一个k比特长的随机整数
>>> random.getrandbits(16)
11316
uniform(a,b) 生成一个[a,b]之间的随机小数
>>> random.uniform(10,100)
78.61088600545293
choice(seq) 从列表seq中随机选择一个元素
>>> random.choice([1,2,3,4,5,6,7,8,9])
5
shuffle(seq) 将序列seq中元素随机排列,返回打乱后的序列
>>> s = [1,2,3,4,5,6,7,8,9];random.shuffle(s);print(s)
[7, 2, 1, 8, 6, 4, 3, 5, 9]
随机数函数的使用
需要掌握的能力
能够利用随机数种子产生“确定”伪随机数
能够产生随机整数
能够对序列类型进行随机操作
圆周率的计算
#CalPiV1.py
pi = 0
N = 100
for k in range(N):
pi += 1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5) - 1/(8*k+6))
print("圆周率的值是:{}".format(pi))
#CalPiV1.py
pi = 0
N = 100
for k in range(N):
pi += 1/pow(16,k)*(\
4/(8*k+1)-2/(8*k+4)- \
1/(8*k+5) - 1/(8*k+6))
print("圆周率的值是:{}".format(pi))
#CalPiV2.py
from random import random
from time import perf_counter
DARTS = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1,DARTS+1):
x,y = random(),random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits = hits+1
pi = 4*(hits/DARTS)
print("圆周率的值是:{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter()-start))
圆周率的计算举一反三
理解方法思维
数学思维:找到公式,利用公式求解
计算思维:抽象一种过程,用计算机自动化求解
程序运行时间分析
使用time库的计时方法获得程序运行时间
改变撒点数量,理解程序运行时间的分布
初步掌握简单的程序性能分析方法