程序的控制结构
程序的控制结构有: 顺序结构,分支结构,循环结构
单分支结构 :可以理解为 如果xx 就yyy
以简单的猜数字为例子
(if True 代表始终为真, if not True 代表始终为假)
guess = eval(input())
if guess == 99:
print("Right!")
双分支:
guess = eval(input())
if guess == 99:
print("Right!")
eles:
print("False")
双分支的紧凑形式格式:
<表达式1> if <条件> else< 表达式2> >
:意思是如果条件成立,那么返回表达式1 ,否则,返回表达式2
表达式是语句的一部分,它不是语句
guess = eval(input())
print("猜{}了".format("对" if guess == 99 else "错"))
多分支结构
score = eval(input())
if score >= 90:
grade = "A"
elif score >= 80 :
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
print("成绩等级为{}".format(grade))
注意分支的设计,如果是 60,70,80 ,90 这样判断,那么91分会直接判定为D等级
条件判断符:> ,<, =, >=, <=, ==, !=
逻辑判断 : and,or ,not (简单来讲就是与或非)。 and <=> && , or <=> || ,not <=> !
guess = eval(input())
if guess > 99 or guess < 99:
print("Right")
else:
print("False")
异常处理
num = eval(input())
#平方操作
print(num**2)
如果用户没有输入整数怎么办?所以我们要对异常进行处理。
在语句块1 中发生except中指定的异常时,执行语句块2,当然也可以不指定,只要发生异常就执行语句块2
try: 语句块1 except<异常类型> : 语句块2
所以我们对程序进行改造
try:
num = eval(input())
print(num**2)
except NameError:
print("输入不是整数")
另一种异常处理
这个意思是,try中的语句块1,发生了异常,执行语句块2,不发生异常执行else 的语句块3,最后无论如何都要执行,finally的语句块4
练习:身体质量质数BMI
BMI计算:体重(kg)/ 身高的平方(m)
height,weight = eval(input("请输入身高(米)和体重(公斤)【逗号隔开】:"))
bmi = weight / (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 < 28:
who,nat = "偏胖","偏胖"
elif 28 <= bmi:
who,nat = "偏胖","肥胖"
print("BMI指标为:国内'{1}',国外'{0}'".format(who,nat))
只要设计多分支,一定要注意范围覆盖的问题!!!
循环
python提供了两种循环方式,遍历循环和无限循环
遍历循环,遍历某个结构形成的循环方式
for <循环变量> in <遍历结构>
<语句块>
常用:
计数循环
循环N次
for i in range(N)
<语句块>
#以M开始一直到N的前一个数字,步长为K
#range(0,5,2) 那么结果就是 0 2,4 ,K可以省略,默认为1
for i in range(M,N,K):
<语句块>
字符串遍历:
#遍历s字符串
#for c in s:
# <语句块>
for c in “python”:
print(c,end=",")
遍历列表:
#for item in ls:
# <语句块>
for item in ["py",1,2,3,"thon"]
print(item,end=",")
文件遍历:
#文件遍历循环
# fi 是文件标识符
#line 文件的每一行
for line in fi
<语句块>
无限循环
只要条件成立就执行表达式,执行之后再判断条件成立与否,不满足条件时,退出
while 条件:
<表达式>
循环控制保留字
break,continue
break,跳出当前循环
continue,跳过当前循环,执行下次循环
循环扩展
for <循环变量> in <遍历结构> :
<语句块1>
else :
<语句块2>
while <条件>:
<语句块1>
else:
<语句块2>
可以这么理解,else 就是正常完成循环的奖励!如果被break了,那么就不执行。
通过else 我们可以直接看出这个循环是否正常结束!
random库
random是使用随机数的Python的标准库
底层使用的是梅森选装算法生成的伪随机序列的元素。
基本随机函数: seed()
, random
扩展随机数函数:randint()
,getrandits()
,uniform()
,
randrange()
, choice()
, shuffle()
随机数种子,梅森选装算法根据随机数种子,产生随机数数序列。也就是说种子和随机序列是一对一的关系。
那么确定种子,就要使用seed(a = None)
函数,初始化给定的随机数种子,默认为当前系统时间。
random.seed(10)
: 当前的随机值种子为10。
如果要再现随机过程,那么就设定一个随机数,如果不需要,那么就使用默认的即可。
扩展随机数
randint(a,b)
: 生成一个【a,b】之间的随机整数
randrange(m,n,[k])
: 生成一个【m,n)以K为步长的随机整数。例如random.randrange(10,100,10) 产生【10,100)之间,以10为步长,取随机值。
getrandbits(k)
: 生成一个k比特长的随机整数,例如 random.getrandbits(8) 就会生成0-255之间的整数
uniform(a,b)
: 生成【a,b】之间的随机小数
choice(seq)
: 从序列seq 中随机选取一个元素。例如 random.choice([1,2,3,4,5,6,7]) 就是在这个列表中随机选取一个值。
shuffle(seq)
:将序列 seq 中元素随机排列,返回打乱后的序列。
圆周率的计算
1.近似公式计算
朴素方法计算
pi = 0
N = 1000
for k in range(N):
pi += 1/pow(16,k) * ( \
4