第四周
一、程序的分支结构
单分支结构
if <>:
<>
if True:
<>(永远都会执行)
二分支结构:两种表达方式
if <>:
<>
else:
<>
<表达式1> if <条件> else <表达式2>
#表达式1为True的执行结果 2为False
例子:
guess = eval(input())
print("猜{}了".format("对"if guess == 99 else"错"))
#此种紧凑形式的表达式1和表达式2不是语句,而只能是语句的一部分!!即不能有赋值等
多分支结构
if <>:
<>
elif:
<>
...
else:
<>
对条件进行组合的保留字
操作符 | 描述 |
---|---|
x and y | 与 |
x or y | 或 |
not x | 非 |
程序的异常处理
eval作用于含字母的字符串后程序会认为是一个变量,如:
num = eval(input())
a = num + 1
#输入abc12, eval后会报错,因为从未定义一个变量叫abc12
三种方法:
- try excpet①
try :
num = eval(input("请输入一个整数:"))
print(num**2)
excpet :#一旦程序运行异常则运行except下面的语句
print("您的输入不是整数")
- try except②
try :
num = eval(input("请输入一个整数:"))
print(num**2)
excpet NameError :
print("您的输入不是整数")
#只能响应NameError的异常类型
- try except else finally
try :
<>
except :
<>
else:
<>
finally :
<>
#finally一定执行 else在try不发生异常时执行
二、实例:BMI
难点:两个同时输入,两个标准
height, weight = eval(input("请输入身高(m)和体重(kg),并用逗号隔开:"))
#eval将输入变成两个用逗号隔开的数字,这样就可以同时赋值给左边
#同样可以用于赋值字符串
who, nat = '偏胖','正常'
三、程序的循环结构
遍历循环
for <循环变量> in <遍历结构> :
<语句块>
功能:从遍历结构中逐一提取元素放到循环变量里,并执行一次语句块
- 计数循环 range(N),range(M开头,N结尾不含,K步长)
- 字符串遍历循环
for c in "python":
print(c,end=',')
- 列表遍历循环 类似2
- 文件遍历循环
for line in fi:
print line
#遍历其每行
无限循环
while <条件>:
<>
#出错无限循环不停时可以Ctrl+c强制退出
循环控制保留字
break(循环立刻结束) & continue(当次循环马上结束)
扩展用法
在for in循环 & while循环后都可以加上
else :
<>
当循环没有被break(!!!continue不会)语句退出时,执行else语句块,作为“正常完成循环”的奖励
三、random库
**一定要播种子啊
基本随机函数
函数名 | 描述 |
---|---|
seed() | 初始化给定的随机数种子,可以自己定义如random.seed(10),即产生种子为10对应的序列(序列是固定的);也可以不定义,则系统默认使用系统时间为种子 |
random() | 生成一个[0,1)之间的随机小数 random.random() |
import random
random.seed(10) #这句可以省略
random.random()
#->result
random.random()
#->result
#即种子只需要给一次,之后每次调用就产生新的随机数
#如果不给种子,则使用系统时间,后面再次调用也是基于第一次使用的时间种子
#自定义种子的好处在于后续可以复现程序结果
扩展随机数函数
函数名 | 描述 |
---|---|
randint(a,b) | 生成一个[a,b]之间的整数 |
randrange(m,n[,k]) | 生成一个[m,n)之间以k为步长的随机整数,如randrange(10,100,10)只能生成10,20… |
getrandbits(k) | 生成一个k比特长的随机整数 |
uniform(a,b) | 生成一个[a,b]之间的随机小数,小数点后16位 |
choice() | 从()内序列中随机选取一个元素 |
shuffle() | 将()中的元素随机排列,返回随机排列后的序列 |
**python中如果代码要放在同一行要用’;'来分隔
**python中如果代码要换行可以在末尾加\
四、实例:圆周率的计算
注:range(5)等价于range(0, 5)
目的:掌握用perf_counter测定程序性能的方法,特别是循环结构,可以单独用来测定循环结构的用时
五、练习与测试
水仙花数:注意如何处理‘数字之间用逗号分隔’
strsum = ''
for i in range (100,1000):
sum = 0 ; a = i
while a!= 0:
sum += pow(a%10,3)
a//=10
if sum == i:
strsum += str(i) + ','
print(strsum[:-1])