Python学习笔记(四)

最近在学习慕课上的公开课《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次)

forin 染个(M, N, K):

        <语句块>

-遍历由range()函数产生的数字序列,产生循环。

计数循环(特定次)

forin 染个(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))
    

你可能感兴趣的:(Python学习与实践,学习,笔记)