第四周学习:程序的控制结构

1.程序的分支结构

1>单分支结构
if <条件>:
<语句块>

2>二分支结构
if <条件>:
<语句块1>
else:
<语句块2>
紧凑形式:<表达式1>if<条件>else<表达式2>

3>多分支结构
if <条件>:
<语句块1>
elif <条件>:
<语句块2>
else:
<语句块3>

4>条件判断及组合
比较操作符
保留字:and ,or

5>程序的异常处理
try:
<语句块1>
except<异常类型>: #此处尖括号可省略
<语句块2>

try:
<语句块1>
except:---------------有异常的时候执行
<语句块2>
else:----------------没有异常的时候执行
<语句块3>
finally:--------------------不管有没有异常都要执行
<语句块4>

2.实例:BMI

1>

#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))
#CalBMIv2.py
height,weight=eval(input("请输入身高(米)和体重\(公斤)[逗号隔开]:"))
bmi=weight/pow(height,2)
print("BMI数值为:{:.2f}".format(bmi))
nat=""
if bmi<18.5:
    nat="偏瘦"
elif 18.5<=bmi<24:
    nat="正常"
elif 24<=bmi<28:
    who="偏胖"
else:
    nat="肥胖"
print("BMI指标为:国内'{0}'".format(who))

2>

#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 = "偏胖", "肥胖"
else:
    who, nat = "肥胖", "肥胖"
print("BMI指标为:国际'{0}',国内'{1}'".format(who, nat))

3.程序的循环结构

1>遍历循环
for <循环变量> in <遍历结构>:
<语句块>
(1)计数循环
for i in range(N):#N次
<语句块>
for i in range(M,N,K):#特定次,从M开始,到N,但不包括N,以K为步长
<语句块>
(2)字符串遍历循环
for c in s:#s表示一个字符串
<语句块>
(3)列表遍历循环
for item in ls:#ls表示一个列表
<语句块>
(4)文件遍历循环
for line in fi:#fi是文件标识符,遍历每行
<语句块>

2>无限循环(条件循环)
while(条件):
<语句块>
若无限循环,可CTRL+C退出循环。(ps:C++里边是CTRL+Z退出循环)

3>循环控制保留字
break,continue

4>循环的高级用法
for <循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>

while <条件>:
<语句块1>
else:
<语句块2>

else是和break可以一起用,若for循环或者while循环的循环体里边有break,且循环被break终止,那么不会执行else语句,若无break语句或者有但是没被break语句终止,则执行else语句。

4.random库的使用

1>random库基本介绍
使用随机数的python标准库
伪随机数:梅森旋转算法生成
random库:用于生成随机数

2>基本随机数函数
seed():初始化随机数种子,默认是当前系统的时间
random():生成[0.0,1.0]之间的随机小数

随机数种子–梅森旋转算法—随机数序列

3>扩展随机数函数
randint(a,b):生成[a,b]之间的随机整数
getrandints(k):生成一个k比特长的随机整数
uniform(a,b):生成[a,b]之间的随机小数
randrange(m,n,k):生成[m,n]之间的,以k为步长的随机整数
choice(seq):从序列seq中随机选择一个元素
shuffle(seq):将序列seq中的元素随机排列,返回打乱后的序列

5.实例:圆周率的计算

1>

#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))

2>

#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()
#随机产生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("运行时间是:{:.5f}s".format(perf_counter()-start))

6.练习们

1>实例5:身体质量指数BMI
描述
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
BMI :Body Mass Index 国际上常用的衡量人体肥胖和健康程度重要标准,主要用于统计分析
定义:BMI = 体重 (kg) /身高2(m2)
获取用户输入的体重和身高值,计算并给出国际和国内的 BMI 分类
要求如下:
(1) 混合计算并给出国际和国内的 BMI 分类;
(2) 使用input()获得测试用例输入时,不要增加提示字符串。

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))

2>实例6:圆周率的计算
描述
这是"实例"题,与课上讲解实例相同,请作答检验学习效果。
求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。
请以123作为随机数种子,获得用户输入的撒点数量,编写程序输出圆周率的值,保留小数点后6位。

from random import random,seed
DARTS=eval(input())
seed(123)
hits=0.0           
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("{:.6f}".format(pi))

3>整数的加减和
描述
编写程序计算如下数列的值:
1-2+3-4…966
其中,所有数字为整数,从1开始递增,奇数为正,偶数为负

sum=0
N=966
for i in range(N+1):
    if(i%2==1):
        sum=sum+i
    else:
        sum=sum-i
print("{}".format(sum))

4>三位水仙花数
描述
“水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。
例如:ABC是一个"3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。
请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。
过了的答案:

s = ""
for i in range(100, 1000):
    t = str(i)
    if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
        s += "{},".format(i)
print(s[:-1])

一开始我自己写的

for i in range(100,1000):
    s=str(i)
    if pow(int(s[0]),3)+pow(int(s[1]),3)+pow(int(s[2]),3)==i:
        print(i,end=",")

5>用户登录的三次机会
描述
给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”

count=0
while count<3:
    #user,password=input()
    user=input()
    password=input()
    if user=='Kate' and password=='666666':
        print("登录成功!")
        break
    else:
        count+=1
        if count==3:
            print("3次用户名或者密码均有误!退出程序。")

6>四位玫瑰数
描述
四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。
例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。
请输出所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。

for i in range(1000,10000):
    s=str(i)
    if pow(int(s[0]),4)+pow(int(s[1]),4)+pow(int(s[2]),4)+pow(int(s[3]),4)==i:
        print(i)

7>100以内素数之和
描述
求100以内所有素数之和并输出。
素数指从大于1,且仅能被1和自己整除的整数。
提示:可以逐一判断100以内每个数是否为素数,然后求和。

def prime(n):
    for i in range(2,n):
        if n%i==0:
            return False
    return True
    
sum=0
for i in range(2,100):
    if prime(i):
        sum+=i
print(sum)

7.总结

咕咕咕,人类的本质是鸽子还是复读机?鸽王的python学习又鸽了一周多,才又出来了hhhh,真的太难了,一玩就停不下来了,尤其玩上几天以后更不想动了。

Guess you like

Origin blog.csdn.net/weixin_45800653/article/details/107711341