【笔记】《python语言程序设计》——程序的控制结构

一、前言

学习就是一个不断的自下而上,自上而下的过程。

前段时间,学着用python实现网站的数据爬取,隐约get到python的一些语法和用法,感觉就是语法不难,关键在于解决问题的思维。

这是需求驱动后的学习。接下来,就需要对python进行系统地了解。

很早之前搜知乎的时候,就搜到MOOC上的一门《python语言程序设计》课程,讲得很好,而且,我还下载了课件,溜了一遍,感觉就挺有趣的。

趁着有了实战经验,就把这门入门课刷了一遍。果然是门好课!很适合小白入门,并系统学习,整个教学过程循序渐进,深入浅出,提纲挈领,很有意思!

课程是北京理工大学嵩天老师的《python语言程序设计》课程,现在已经开了11次课了。课程每个小视频短则几分钟,最长也不超过20分钟,不容易劝退。每章讲解有复习回顾及小结,在平台python123上有每章的练习和测试,直接反馈结果,激发继续学下去的兴趣。

个人感觉,老师说话速度慢了些,调成了2倍速播放,然后,花了大约3天的时间,把所有的视频,课件,练习和测试都刷了一遍,感觉对python的了解更系统了!

趁热打铁,把每章的知识点和练习、测试再进行整理回顾一下。

以下内容均来自课程:《python语言程序设计》平台python123,感兴趣的看课程视频,亲自练习,效果更好~

二、知识点

1. 程序的分支结构

  1. 单分支结构

    单分支示例:

    guess=eval(input())
    if guess==99:
        print('猜对了')
    
  2. 二分支结构

    ①二分支示例:

    guess=eval(input())
    if guess==99:
        print('猜对了')
    else:
        print('猜错了')
    

    ②紧凑形式:适用于简单表达式的二分之结构

    <表达式1> if <条件> else <表达式2>

    guess=eval(input())
    print('猜{}了'.format('对' if guess==99 else '错'))
    
  3. 多分支结构

    ①多分支结构示例:

    score=eval(input())
    if score>=60:
        grade='D'
    elif score>=70:
        grade='C'
    elif score>=80:
        grade='B'
    elif score>=90:
        grade='A'
    print('输入成绩属于级别{}'.format(grade))
    

    ②程序的控制结构:顺序结构、分支结构、循环结构

  4. 条件判断及组合

    ①操作符

    操作符 描述
    < 小于
    <= 小于等于
    >= 大于等于
    > 大于
    == 等于
    != 不等于
    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('猜对了')
    
  5. 程序的异常处理

    ①异常处理的基本使用

    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,在不发生异常时执行
    else:
        <语句块3>
    # finally对应语句块4,一定执行
    finally:
        <语句块4>
    

2. 实例5:身体质量指数BMI

描述:同时输出国际和国内对应的分类

BMI=体重(kg)/身高2(m2

bmi.png
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 <遍历结构>:
        <语句块>
    

    ②举例:

    #计数循环(N次)
    for i in range(N):
        <语句块>
    #计数循环(特定次)
    for i in range(M,N,k):
        <语句块>
    #字符串遍历循环
    for i in s:
        <语句块>
    #列表遍历循环,ls是一个列表,遍历其每个元素,产生循环
    for item in ls:
        <语句块>
    #文件遍历循环,fi是一个文件标识符,遍历其每行,产生循环
    for line in fi:
        <语句块>
    
  2. 无限循环:由条件控制的循环运行方式

    #反复执行语句块,直到条件不满足时结束
    while <条件>:
        <语句块>
    #示例,无限循环的条件
    a=3
    while a>0:
        a=a-1
        print(a)
    
  3. 循环控制保留字:breakcontinue

    break:跳出并结束当前整个循环,执行循环后的语句,仅跳出当前最内层循环

    continue:结束当次循环,继续执行后续次数循环

    breakcontinue:可以与forwhile循环搭配使用

循环保留字.png
  1. 循环的高级用法:循环与else

    ①当循环没有被break语句退出时,执行else语句块

    ②else语句块作为“正常”完成循环的奖励

    ③这里else的用法与异常处理中else用法相似

循环与else.png

4.模块3:random库的使用

  1. random库基本介绍

    ①random库是使用随机数的Python标准库

    ②random库主要用于生成随机数

    ③使用:import random

    ④需要掌握的能力:能够利用随机数种子产生“确定”伪随机数;能够产生随机整数;能够对序列类型进行随机操作;

  2. 基本随机数函数

    函数 描述
    seed(a=None) 初始化给定的随机数种子,默认为当前系统时间
    random() 生成一个[0.0,1.0)之间的随机小数
基本随机数函数.png
  1. 扩展随机数函数

    函数 描述
    randint(a,b) 生成一个[a,b]之间的整数
    randrange(m,n[,k]) 生成一个[m,n)之间以k为步长的随机整数<br />randrange(10,100,10)结果可能为80
    getrandbits(k) 生成一个k比特长的随机整数<br />random.getrandbits(16)结果可能为37885
    uniform(a,b) 生成一个[a,b]之间的随机小数<br />random.uniform(10,100)结果可能为13.096321648808136
    choice(seq) 从序列seq中随机选择一个元素<br />random.choice([1,2,3,4,5,6,7,8,9])结果可能为8
    shuffle(seq) 将序列seq中元素随机排列,返回打乱后的序列<br />s=[1,2,3,4,5,6,7,8,9];random.shuffle(s);print(s)结果可能为[3,5,8,9,6,1,2,7,4]
    • PS:哈哈,就喜欢这种态度!
学不会就学不会.png

5.实例6:圆周率的计算

描述:求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。

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

三、练习

1.实例5:身体质量指数BMI

同上

2. 实例6:圆周率的计算

同上

3. 整数的加减和

描述:编写程序计算如下数列的值:

1-2+3-4...966

其中,所有数字为整数,从1开始递增,奇数为正,偶数为负

r=1
for i in range(2,967):
    if i%2==0:
        r=eval(str(r)+'-'+str(i))
    else:
        r=eval(str(r)+'+'+str(i))
print(r)

4. 三位水仙花数

描述:"水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。

例如:ABC是一个"3位水仙花数",则:A的3次方+B的3次方+C的3次方 = ABC。

请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。

k=''
for i in range(100,1000):
    k1=i//100
    k2=(i-k1*100)//10
    k3=i-k1*100-k2*10
    if pow(k1,3)+pow(k2,3)+pow(k3,3)==i:
        k+=str(i)+','
print(k.rstrip(','))

5.用户登录的三次机会

描述:给用户三次输入用户名和密码的机会,要求如下:

1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;

2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”。

for i in range(1,4):
    ID=input()
    pw=input()
    if (ID=='Kate')&(pw=='666666'):
        print('登录成功!')
        break
else:
    print('3次用户名或者密码均有误!退出程序。')

四、测试

1.选择题

   for var in ___:
       print(var)

哪个选项不符合上述程序空白处的语法要求?

A "Hello"

B (1,2,3)

C range(0,10)

D {1;2;3;4;5}

for .. in .. 中 in 的后面需要是一个迭代类型(组合类型),{1;2;3;4;5}不是Python的有效数据类型。

  1. for i in range(0,2):
        print(i)
    

哪个选项是以上程序的输出结果?

A 1 B 1 2 C 0 1 2 D 0 1

range(0, 2)输出两个值:0和1。

  1. k=10000
    while k>1:
        print(k)
        k=k/2
    

哪个选项给出了上述程序的输出次数?

A 15 B 1000 C 13 D 14

请跟随程序计算或在IDLE中运行程序获得结果。

  1. 哪个选项是程序的三种基本结构?

    A 顺序结构,跳转结构,循环结构

    B 过程结构,对象结构,函数结构

    C 顺序结构,循环结构,分支结构

    D 过程结构,循环结构,分支结构

无对象结构、跳转结构、过程结构等说法

  1. 哪个选项关于循环结构的描述是错误的?

    A 条件循环和遍历循环结构都是基本的循环结构

    B 循环是一种程序的基本控制结构

    C 循环是程序根据条件判断结果向后反复执行的一种运行方式

    D 死循环无法退出,没有任何作用

死循环能够用于测试性能,形式上的死循环可以用break来退出,例如:

x = 10
while True:
    x = x - 1
    if x == 1:
         break

死循环是有其作用的。

  1. 关于Python语句P=-P,哪个选项的描述是正确的?

    A 给P赋值为它的负数

    B P等于它的负数

    C P=0

    D P的绝对值

turtle.pendown()只是放下画笔,并不绘制任何内容。

  1. 哪个选项是用来判断当前Python语句在分支结构中?

    A 缩进 B 冒号 C 引号 D 大括号

缩进表达层次关系。

  1. 哪个选项是下面代码的执行结果?
for s in "PYTHON":
   if s=="T":
      continue
   print(s,end="")

A TT B PYTHON C PY D PYHON

continue结束当次循环,但不跳出当前循环。

  1. 哪个选项是random库中用于生成随机小数的函数?

    A randrange() B randint() C random() D getrandbits()

randint()、getrandbits()、randrange()都产生随机整数,random()产生0到1之间的随机小数。

  1. 关于try-except,哪个选项的描述是错误的??

    A NameError是一种异常类型

    B 用于对程序的异常进行捕捉和处理

    C 表达了一种分支结构的特点

    D 使用了异常处理,程序将不会再出错

使用了异常处理,程序可能运行不会出错,但逻辑上可能出错。程序错误是一个大概念,不仅指代码运行错误,更代表功能逻辑错误。

2.程序设计题

  1. 四位玫瑰数

描述:四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。

例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。

请输出所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。

for i in range(1000,10000):
    k1=i//1000
    k2=(i-k1*1000)//100
    k3=(i-k1*1000-k2*100)//10
    k4=i-k1*1000-k2*100-k3*10
    if pow(k1,4)+pow(k2,4)+pow(k3,4)+pow(k4,4)==i:
        print(i)
  1. 100以内素数之和

描述:求100以内所有素数之和并输出。

素数指从大于1,且仅能被1和自己整除的整数。

提示:可以逐一判断100以内每个数是否为素数,然后求和。

m=0
for i in range(2,101):
    for k in range(2,101):
        if (i%k==0)&(i!=k):
            break
    else:
        m=m+i
print(m)

【笔记】《python语言程序设计》—Python基本语法元素

【笔记】《python语言程序设计》—Python基本图形绘制

【笔记】《python语言程序设计》——基本数据类型

【笔记】《python语言程序设计》——程序的控制结构

【笔记】《python语言程序设计》——函数和代码复用

【笔记】《python语言程序设计》——组合数据类型

【笔记】《python语言程序设计》——文件和数据格式化

【笔记】《python语言程序设计》——程序设计方法学

【笔记】《python语言程序设计》——python计算生态概览

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容

  • 一、程序的分支结构 1、单分支结构 根据判断条件结果而选择不同向前路径的运行方式 if <条件>: <...
    墨小凉阅读 430评论 0 0
  • 4.1 分支结构 4.1.1 单分支结构 基本构成: if <条件>: <语句1> 基本实例: guess=e...
    d4829fc4d3cc阅读 212评论 0 0
  • 即使面对同一个人,你的所见所听所想,也会在不同心境下,感受到不同的味道。即使面对曾经是恋人的那个ta,以前ta诉说...
    思远说阅读 311评论 2 6
  • 我有一段幻象 在混沌的晨雾升腾与工业烟尘毒害鼻腔之前 是剜出的荷鲁斯之眼 在廉价旅馆的单薄的床单 床单上面是疯狂情...
    RealSugarCane阅读 632评论 1 5
  • 今天, 我在国旗下面敬礼时总会想:国旗在天空中飞扬,他能看见我们的一举一动,他身上那五颗星星不时的发出一丝光亮,他...
    牛广宇阅读 727评论 0 0