全国计算机等级考试二级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))

条件判断
  • 操作符
    全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
    文章图片
条件组合
  • 用于条件组合的三个保留字
    全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
    文章图片
条件判断及组合
  • 示例
guess = eval(input()) if guess > 99 or guess < 99: print("猜错了") else: print("猜对了")

异常处理
num = eval(input("请输入一个整数:")) print(num**2)

  • 若用户输入字符串abc,则运行出现如图错误:
    全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
    文章图片
  • 异常处理的基本使用
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)
  • 国际:世界卫生组织 国内:国家卫生健康委员会
全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

问题需求
  • 输入:给定体重和身高值
  • 输出: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()
基本随机数函数
  • 随机数种子
全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

示例: >>>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

扩展随机数函数
全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片
全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

随机数函数的使用
  • 需要掌握的能力
  • 能够利用随机数种子产生"确定"伪随机数
  • 能够产生随机整数
  • 能够对序列类型进行随机操作
实例 圆周率的计算 "圆周率的计算"问题分析
  • 蒙特卡罗方法
    全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
    文章图片
"圆周率的计算"实例讲解
  • 圆周率的近似计算公式
    π = ∑ 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指标分类信息(国际和国内)
    全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
    文章图片
题目要求:
(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次用户名或者密码均有误!退出程序。")

第四周测验题目 单项选择题
第一题 全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

第七题 全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

程序设计题
第一题 四位玫瑰数
题目描述:四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。????????????????????????????????????????????????????????????????????????????????????????????????
例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。????????????????????????????????????????????????????????????????????????????????????????????????
请输出所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。
输入输出示例:
全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

代码如下: 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以内每个数是否为素数,然后求和。
输入输出示例:全国计算机等级考试二级Python(2021年9月)备考笔记 第四天
文章图片

代码如下: 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)

    推荐阅读