全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章目录
- Python语言程序设计-嵩天老师(MOOC)听课笔记 第4周
-
- 知识点一
-
- 单分支结构
- 二分支结构
- 多分支结构
- 条件判断
- 条件组合
- 条件判断及组合
- 异常处理
- 实例 身体质量指数BMI
-
- 问题需求
- 思路方法
- 举一反三
- 知识点二
-
- 遍历循环
- 遍历循环的应用
- 无限循环
- 无限循环的应用
- 循环控制保留字
- 循环的扩展
- random库概述
- 基本随机数函数
- 扩展随机数函数
- 随机数函数的使用
- 实例 圆周率的计算
-
- "圆周率的计算"问题分析
- "圆周率的计算"实例讲解
- 举一反三
- 课后练习题
-
- 实例一 身体质量指数BMI
- 实例二 圆周率的计算
- 实例三 整数的加减和
- 实例四 三位水仙花数
- 实例五 用户登录的三次机会
- 第四周测验题目
-
- 单项选择题
-
- 第一题
- 第七题
- 程序设计题
-
- 第一题 四位玫瑰数
- 第二题 100以内素数之和
Python语言程序设计-嵩天老师(MOOC)听课笔记 第4周 知识点一 单分支结构
- 根据判断条件结果而选择不同向前路径的运行方式
if <条件>:
<语句块>
二分支结构
- 二分支示例(猜数字)
guess =eval(input())
if guess==99:
print("猜对了")
else:
print("猜错了")
- 紧凑形式:适用于简单表达式的二分支结构
<表达式1> if <条件> else <表达式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))
条件判断
- 操作符
文章图片
- 用于条件组合的三个保留字
文章图片
- 示例
guess = eval(input())
if guess > 99 or guess < 99:
print("猜错了")
else:
print("猜对了")
异常处理
num = eval(input("请输入一个整数:"))
print(num**2)
- 若用户输入字符串abc,则运行出现如图错误:
文章图片
- 异常处理的基本使用
try:
<语句块1>
except:
<语句块2>
#或
try:
<语句块1>
except <异常类型>:
<语句块2>
- 示例-1
try:
num=eval(input("请输入一个整数:"))
print(num**2)
except:
print("输入不是整数")
- 示例-2
try:
num = eval(input("请输入一个整数"))
print(num**2)
except NameError:#标注异常类型后,仅响应该异常异常类型名字等同于变量
print("输入不是整数")
- 异常处理的高级使用
try :
<语句块1>
except :
<语句块2>
else :#不发生异常时执行
<语句块3>
finally :#一定执行
<语句块4>
实例 身体质量指数BMI
- BMI:对身体质量的刻画
- 定义: B M I = 体 重 ( k g ) / 身 高 2 ( m 2 ) BMI=体重(kg)/身高^2(m^2) BMI=体重(kg)/身高2(m2)
- 国际:世界卫生组织 国内:国家卫生健康委员会
问题需求
文章图片
思路方法
- 输入:给定体重和身高值
- 输出:BMI指标分类信息(国际和国内)
难点在于同时输出国际和国内对应的分类
- 思路一:分别计算并给出国际和国内BMI分类
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))
- 思路二:混合计算并给出国际和国内BMI分类
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 <循环变量> in <遍历结构>:
<语句块>
遍历循环的应用
- 从遍历结构中逐一提取元素,放在循环变量中
- 由保留字 f o r for for和 i n in in组成,完整遍历所有元素后结束
- 每次循环所获得元素放入循环变量,并执行一次语句块
- 计数循环(N次)
for i in range(N):
<语句块>
遍历由 r a n g e ( ) range() range()函数产生的数字序列,产生循环
示例1:
>>> for i in range(5):
print(i)0
1
2
3
4
示例2:
>>> for i in range(5):
print("Hello:",i)
Hello: 0
Hello: 1
Hello: 2
Hello: 3
Hello: 4
- 计数循环(特定次)
for i in range(M,N,K):
<语句块>
示例1:
>>> for i in range(1,6):
print(i)
1
2
3
4
5
示例2:
>>> for i in range(1,6,2):
print("Hello:",i)
Hello: 1
Hello: 3
Hello: 5
- 字符串遍历循环
for c in s:
<语句块>
s是字符串,遍历字符串每个字符,产生循环
示例:
>>> for c in "Python123":
print(c,end=",")
P,y,t,h,o,n,1,2,3,
- 列表遍历循环
for item in ls:
<语句块>
l s ls ls是一个列表,遍历其每个元素,产生循环
示例
>>> for item in [123,"PY",456]:
print(item,end=",")
123,PY,456,
- 文件遍历循环
for line in fi:
<语句块>
f i fi fi是一个文件标识符,遍历其每行,产生循环
示例:
>>>for line in fi:
print(line)#输出文件每一行的内容
无限循环
- 由条件控制的循环运行方式
while <条件>:
<语句块>
反复执行语句块,直到条件不满足时结束
- 无限循环
- 无限循环的条件
>>>a=3
>>>while a>0:
a=a-1
print(a)
2
1
0
>>>a=3
>>>while a>0:
a=a+1
print(a)
4
5
...(CTRL+C退出)
循环控制保留字
- b r e a k 和 c o n t i n u e break和continue break和continue
b r e a k break break跳出并结束当前整个循环,执行循环后的语句
c o n t i n u e continue continue结束当前次循环,继续执行后续次数循环
b r e a k break break和 c o n t i n u e continue continue可以与 f o r for for和 w h i l e while while循环搭配使用
>>>for c in "PYTHON":
if c =="T":
continue
print(c,end="")PYHON
>>>for c in "PYTHON":
if c =="T":
break
print(c,end="")PY
>>>s="PYTHON"
>>>while s !="":
for c in s:
print(c,end="")
s=s[:-1]PYTHONPYTHOPYTHPYTPYP
>>> s="PYTHON"
>>> while s !="":
for c in s:
if c=="T":
break
print(c,end="")
s=s[:-1]PYPYPYPYPYP
break仅跳出当前最内层循环循环的扩展
- 循环与else
当循环没有被break语句退出时,执行else语句块
else语句块作为"正常"完成循环的奖励
这里else的用法与异常处理中else用法相似
>>>for c in "PYTHON":
if c == "T":
continue
print(c,end="")
else:
print("正常退出")PYTHON正常退出
>>>for c in "PYTHON":
if c =="T":
break
print(c,end="")
else:
print("正常退出")PY
random库概述
- random库是使用随机数的Python标准库
- 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
- random库主要用于生成随机数
- random库包括两类函数,常用共8个
基本随机数函数
- 基本随机数函数:seed(),random()
- 扩展随机数函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
- 随机数种子
文章图片
文章图片
示例:
>>>import random
>>>random.seed(10)
>>>random.random()
0.5714025946899135
>>>random.random()
0.4288890546751146
......
>>>import random
>>>random.seed(10)
>>>random.random()
0.5714025946899135
>>>random.seed(10)
>>>random.random()
0.5714025946899135
扩展随机数函数
文章图片
文章图片
文章图片
随机数函数的使用
- 需要掌握的能力
实例 圆周率的计算 "圆周率的计算"问题分析
- 能够利用随机数种子产生"确定"伪随机数
- 能够产生随机整数
- 能够对序列类型进行随机操作
- 蒙特卡罗方法
文章图片
- 圆周率的近似计算公式
π = ∑ k = 0 ∞ [ 1 1 6 k ( 4 8 k + 1 ? 2 8 k + 4 ? 1 8 k + 5 ? 1 8 k + 6 ) ] \pi=\sum_{k=0}^{\infin}[\frac{1}{16^k}(\frac{4}{8k+1}-\frac{2}{8k+4}-\frac{1}{8k+5}-\frac{1}{8k+6})] π=∑k=0∞?[16k1?(8k+14??8k+42??8k+51??8k+61?)]
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))
输出结果:
圆周率值是:3.141592653589793
- 蒙特卡罗方法:
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()
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))
运行结果:
圆周率值是:3.144
运行时间是:1.54555s
举一反三
- 理解方法思维
数学思维:找到公式,利用公式求解
计算思维:抽象一种过程,用计算机自动化求解
- 程序运行时间分析
使用time库的计时方法获得程序运行时间
改变撒点数量,理解程序运行时间的分布
初步掌握简单的程序性能分析方法
- 计算问题的扩展
- 不求解圆周率,而是某个特定图形的面积
- 在工程计算中寻找蒙特卡罗方法的应用实例
实例一 身体质量指数BMI
题目描述:
- 定义: B M I = 体 重 ( k g ) / 身 高 2 ( m 2 ) BMI=体重(kg)/身高^2(m^2) BMI=体重(kg)/身高2(m2)
- 输入:给定体重和身高值
- 输出: B M I BMI BMI指标分类信息(国际和国内)
文章图片
题目要求:
(1) 混合计算并给出国际和国内的 BMI 分类;????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
(2) 使用input()获得测试用例输入时,不要增加提示字符串。????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
输入示例:1.68,41
输出示例:
BMI数值为:14.53
BMI指标为:国际'偏瘦',国内'偏瘦'
代码如下:
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))
实例二 圆周率的计算
题目描述:求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。
题目要求:请以123作为随机数种子,获得用户输入的撒点数量,编写程序输出圆周率的值,保留小数点后6位。????????????????????????????????????????????????????????????????????????????????????????????????
输入示例:1024
输出示例:3.218750
from random import random, seed
DARTS = eval(input())
seed(123)
hits = 0.0
for i in range(DARTS):
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))
实例三 整数的加减和
题目描述:编写程序计算如下数列的值:????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1-2+3-4…966????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
其中,所有数字为整数,从1开始递增,奇数为正,偶数为负
输出示例:111
代码如下:
s = 0
count = 1
while count <=966:
if count%2 == 0:
s -= count
else:
s += count
count += 1
print(s)
实例四 三位水仙花数
题目描述:“水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
例如:ABC是一个"3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。
输出示例:111,222
代码如下:
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])
实例五 用户登录的三次机会
题目描述:给用户三次输入用户名和密码的机会,要求如下:????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”。????????????????????????????????????????????????????????????????????????????????????????????????
输入示例:
Kate
666666
输出示例:
登录成功!
代码如下:
count = 0
while count < 3:
name = input()
password = input()
if name == 'Kate'and password == '666666':
print("登录成功!")
break
else:
count += 1
if count == 3:
print("3次用户名或者密码均有误!退出程序。")
第四周测验题目 单项选择题
第一题
文章图片
第七题
文章图片
程序设计题
第一题 四位玫瑰数
题目描述:四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。????????????????????????????????????????????????????????????????????????????????????????????????
例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。????????????????????????????????????????????????????????????????????????????????????????????????
请输出所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。
输入输出示例:
文章图片
代码如下:
s = ""
for i in range(1000, 10000):
t = str(i)
if pow(eval(t[0]),4) + pow(eval(t[1]),4) + pow(eval(t[2]),4) + pow(eval(t[3]),4) == i :
print(i)
第二题 100以内素数之和
【全国计算机等级考试二级Python(2021年9月)备考笔记 第四天】题目描述:求100以内所有素数之和并输出。????????????????????????????????????????????????????????????????????????????????????????????????
素数指从大于1,且仅能被1和自己整除的整数。????????????????????????????????????????????????????????????????????????????????????????????????
提示:可以逐一判断100以内每个数是否为素数,然后求和。
输入输出示例:
文章图片
代码如下:
def is_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 is_prime(i):
sum += i
print(sum)
推荐阅读
- ACSL|ACSL 美国计算机科学联赛 2016-2017 R4 摩天大楼-Skyscraper 题解
- 临清一中学子斩获北大培文杯作文大赛全国大奖
- 积极探索|积极探索 绽放生命 ???——心心相印计划:青少年心理工作研讨小组全国大型公益行动第二次活动包头市青山区分校圆满成功
- 历史上的今天|【历史上的今天】2 月 16 日(世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛)
- 计算机网络基础TCP\HTTP\HTTPS
- 计算机网络|计算机网络——DHCP协议详解
- android|android today上下卡片,【精品文档】关于计算机专业大学生安卓系统有关的外文文献翻译成品(基于Android(安卓)的考勤管理系统(中英文双语对照)
- 胡宝林获“美丽秦岭我的家”全国创作大赛奖
- 计算机与时间
- 中国农业大学计算机就业薪资,2020年工资出炉,这个行业倒数第一,不过这类大学专业有金矿可挖...