最近在学习慕课上的公开课《Python语言程序设计》,该课程是国家精品,由来自北京理工大学的 嵩天团队精心打造,讲解清晰,层层递进,想跟我一起学习的可点击蓝色课程名称直接跳转到该课程页面。以下是个人学习的笔记,如有错误,敬请指正。
程序的控制结构
程序的分支结构
单分支结构
if语句
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(inout())
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
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")
程序的异常处理
异常处理的基本使用
try :
<语句块1>
except :
<语句块2>
try :
<语句块1>
except <异常类型>:
<语句块2>
try:
num = eval(input("请输入一个整数:"))
print(mum**2)
except:
print("输入不是整数")
try:
num = eval(input("请输入一个整数:"))
print(mum**2)
except NameError:
print("输入不是整数")
异常处理的高级使用
try :
<语句块1>
except :
<语句块2>
else :
<语句块3>
finally :
<语句块4>
其中,finally对应语句块4一定执行,else对应语句块3在不发生异常时执行。
身体质量指数BMI
#CalBMIv1.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 = "偏胖", "肥胖"
else:
who, nat = "肥胖","肥胖"
print("BMI 指标为:国际'{0}',国际'{1}'".format(who,nat))
关注多分支条件的组合
-多分支条件之间的覆盖是重要问题
-程序可运行,但不正确,要注意多分支
-分支结构是程序的重要框架,读程序先看分支
程序的循环结构单元
-遍历循环(for)
-无限循环(while)
-循环控制保留字
-循环的高级用法
遍历循环
遍历某个结构形成的循环运行方式
for <循环变量> in <遍历结构> :
<语句块>
计数循环(N次)
for i in 染个(M, N, K):
<语句块>
-遍历由range()函数产生的数字序列,产生循环。
计数循环(特定次)
for i in 染个(1, 6, 2):
<语句块>
for i in range(1,6,2)
print("HELLO:",i)
字符串遍历循环
for c in s:
<语句块>
-s是字符串,遍历字符串每个字符,产生循环。
for c in "Python123":
print(c, end=",")
列表遍历循环
for item in ls:
<语句块>
-ls是一个列表,字符串,遍历其每个元素,产生循环。
for item in [123, "PY", 456]:
print(item, end=",")
文件遍历循环
for line in fi:
<语句块>
-fi是一个文件标识符,遍历其每行,产生循环。
无限循环
由条件控制的循环运行方式
while <条件>:
<语句块>
-反复执行语句块,直到条件不满足时结束。
a = 3
while a > 0:
a = a - 1
print(a)
a = 3
while a > 0:
a = a + 1
print(a)
#第二个程序将永远执行下去,按CTRL + C退出执行
循环控制保留字
break和continue
-break跳出并结束当前整个循环,执行循环后的语句
-continue结束当次循环,继续执行后续次数循环
-break和continue可以与for和while循环搭配使用
for c in "PYTHON"
if c == "T":
continue
print(c, end="")
for c in "PYTHON"
if c == "T":
break
print(c, end="")
两层或更多层循环。
s = "PYTHON"
while s != "":
for c in s:
print(c, end="")
s = s[:-1] # 去掉最后一个字符串
s = "PYTHON"
while s != "":
for c in s:
if c == "T":
break
print(c, end="")
s = s[:-1] # 去掉最后一个字符串
记住:一个break保留字仅跳出当前的最内层循环,如果有多层循环嵌套的时候,它只跳出内层,外层循环仍然有效。
循环的高级用法
循环与else
-当循环没有被break语句退出时,执行else语句块
-else语句块作为“正常”完成循环的奖励
for c in "PYTHON"
if c == "T":
continue
print(c, end="")
else:
print("正常退出")
for c in "PYTHON"
if c == "T":
break
print(c, end="")
else:
print("正常退出")
第一部分程序将输出“PYTHON正常退出”,而第二部分程序由于执行了break语句,将退出程序,不再执行else语句,于是输出“PY”。所以,通过else的扩展,我们是能够知道一段循环中是否被break结束,这样对于我们进行程序的逻辑的设计将变得更加便捷。
random库的使用
random库是随机数的Python标准库
-伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
-random库主要用于生成随机数
-使用random库:import random
random包括两类函数,常用共8个
-基本随机函数:seed(),random()
-扩展随机函数:randint(),getrandbits(),uniform(),randange(),choice(),shuffle()
基本随机数函数
随机数种子
给定一个随机数种子,经过梅森旋转算法,生成随机序列及随机数。只要种子相同 ,产生的随机序列,无论是每一个数,还是数之间的关系都是确定的,所以随机数种子确定了随机序列的产生。
函数 | 描述 |
---|---|
seed(a=NONE) | 初始化给定的随机数种子,默认为当前系统时间 >>>random.seed(10) #产生种子10对应的序列 |
random() | 生成一个【0.0,1.0)之间的随机小数 >>>random.random() |
记住:如果不给种子,默认的种子为第一次调用函数所调用的系统时间。使用种子,可以较容易地实现程序再现。
扩展基本随机数函数
函数 | 描述 |
---|---|
randint(a,b) | 生成一个[a,b]之间的整数 >>>random.randint(10,100) 64 |
randrange(m, n[, k]) | 生成一个[m, n)之间以k为步长的随机整数 >>>random.randrange(0,100, 10) 80 |
getrandbits(k) | 生成一个k比特长的随机整数 >>>random.getrandbits(16) 37885 |
uniform(a, b) | 生成一个[a,b]之间的随机小数 >>>random.uniform(10,100) 13.096321648808136 |
choice(seq) | 从序列seq中随机选择一个元素 >>>random.choice([1,2,3,4,5,6,7,8,9]) 8 |
shuffle(seq) | 将序列seq中元素随机排列,返回打乱后的序列 >>>s=[1,2,3,4,5,6,7,8,9]; >>>random.shuffle(s); >>>print(s) [3,5,8,9,6,1,2,7,4] |
需要掌握的能力
-能够利用随机数种子产生“确定”伪随机数
-能够产生随机整数
-能够对序列类型进行随机操作
圆周率的计算
圆周率的近似计算公式
#CalPiV1.py
pi = 0
N = 100
for k in range(N):
pi += 1/pow(16,k)*(4/(8k+1) - 2/(8k+4) - 1/(8k+5) - 1/(8k+6))
print("圆周率值是:{}".format(pi))
蒙特卡罗方法
圆与外接正方形面积的比值与圆的面积有关,撒点法
#CalPiV2.py
from random import random
from time import perf_counter
DARTS = 1000*1000 #撒点数量为100万
hits = 0.0 #目前在圆的内部的数量
start = perf_counter() #当前系统时间
for i in range(1, DARTS+1) #开启循环,进行撒点
x, y = random(), random() #使用x,y变量生成两个随机数的坐标,random()函数生成的随机数范围在0~1之间
dist = pow(x**2 + y**2, 0.5) #计算点到圆心距离
if dist <= 1.0:
hits = hits + 1
pi = 4*(hits/DARTS)
print("圆周率值是:{}".format(pi))
print("运行时间是:{0.5f}".format(perf_counter() - start))