Python从入门到精通,100天就够了!(2)——分支结构与循环结构

2023-11-18

上一篇文章讲了Python初体验,了解了Python的历史、优缺点、未来发展前景,带大家初步了解了一下Python,之后学习了Python中的语言元素——变量和运算符。经过简单的练习,相信大家也基本掌握了这两个元素。我们昨天写的代码都是一条一条执行,我们称之为顺序结构,但是就如同我们的人生不可能是一帆风顺,总会遇到人生的岔路口,需要我们做出自己的选择。同样在编程语言中计算机也需要做出选择。

一、分支结构(选择结构)

比如我们在登录某一账号时,系统需要将我们输入的账号和密码同时和系统中已保存的账号和密码进行比对,如果账号和密码同时通过,那么我们登陆成功,否则提示登录失败,请重新输入。这里就会产生两条分支,这两条分支只有一条会被执行,我们将这种结构称为分支结构,也叫选择结构。在Python中,要构造分支结构可以使用ifelifelse关键字。

基本结构为:

if     条件:
      条件成立执行的代码块
      …
elif     条件:
      条件成立执行的代码块
      …
else:
      …

这里我们需要注意的是,条件后一定要加“ ”,条件成立执行的代码块前要打四个空格。不同于C++、Java等编程语言,Python中没有用花括号来构造代码块而是使用了缩进的方式来表示代码的层次结构,条件成立执行的代码只需要保持相同的缩进就可以了,缩进可以任何数量空格,但是我们一般使用四个空格

1.分支结构初体验

下面举一个例子:

import getpass
username = input('用户名:')
password = getpass.getpass('密码:')
if username == 'admin' and password == '123456':
    print('登陆成功,欢迎您!')
    print('客服热线:400-500-8820')
else:
    print('登录失败,用户名或密码错误')
print('程序结束,下次见')

在这个程序中,首先让用户输入用户名和密码,如果用户名和密码同时符合条件,则执行登录成功的代码块,否则执行登录失败的代码块,不管是否登陆成功,都会执行程序结束,下次见的代码。

2.分支结构练习

1. 下面我们使用分支结构来求一个分段函数的值

f ( x ) = {     3 x − 5 , x > 1     x + 2 , 1 > = x > = − 1     5 x + 3 , x < − 1 f(x)= \begin{cases} \ \ \ 3x - 5,&x > 1\\ \ \ \ x + 2 ,& 1>=x >= -1\\ \ \ \ 5x + 3,&x < -1 \end{cases} f(x)=   3x5,   x+2,   5x+3,x>11>=x>=1x<1

代码如下:

x = float(input('x='))
if x > 1:
    y = 3 * x - 5
elif x >= -1:
    y = x + 2
else:
    y = 5 * x + 3
print(f'f(x) = {y:.2f}')

我们让用户输入一个数字,然后判断这个数字的范围,这个范围就是分支结构的条件,如果第一个条件不满足就进行第二个条件判断,若前两个条件都不满足,则不用判断第三次,直接运行第三个条件下的代码块。

2. 输入本月总收入,输入本月五险一金扣除金额,计算出应缴税款和税后收入

请添加图片描述

代码如下:

total = float(input('本月收入:'))
insurance = float(input('五险一金缴纳额:'))
E = total - insurance
I = E - 3500
if I <= 0:
    A = E
if 1500 > I >= 0:
    T = I * 0.03
    A = E - T
if 4500 > I >= 1500:
    T = I * 0.1 - 105
    A = E - T
if 9000 > I >= 4500:
    T = I * 0.2 - 555
    A = E - T
if 35000 > I >= 9000:
    T = I * 0.25 - 1005
    A = E - T
if 55000 > I >= 35000:
    T = I * 0.3 - 2755
    A = E - T
if 80000 > I >= 55000:
    T = I * 0.35 - 5505
    A = E - T
if I >= 80000:
    T = I * 0.45 - 13505
    A = E - T
print(f'您应该缴纳税款:{T}元,您的税后收入为:{A:.2f}')

让用户输入本月收入和五险一金应缴纳金额后,计算出扣除五险一金后的工资 E ,再算出减去个税起征点3500后的 I ,通过判断 I 所在的范围,计算出缴纳税款和税后收入。

二、循环结构

如果我们要实现每隔1秒中在屏幕上打印一次“hello, world”并持续打印一个小时,我们肯定不能够直接把print('hello, world')这句代码写3600遍,这里就需要循环结构。循环结构就是程序中控制某条或某些指令重复执行的结构。在Python中构造循环结构有两种做法,一种是for-in循环,一种是while循环。

1.for-in循环

基本结构

for   临时变量   in  序列:
        重复执行代码
        …

如果明确地知道循环执行的次数,我们推荐使用for-in循环,例如计算1到100的和。 被for-in循环控制的语句块也是通过缩进的方式来确定的,这一点跟分支结构完全相同,大家看看下面的代码就明白了。

total = 0
for A in range(1, 101):
    total = total + A
print(total)
  • range(101):可以用来产生0到100范围的整数,需要注意的是取不到101。
  • range(1, 101):可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。
  • range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。
  • range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。

我们首先将1-100的总和赋予初始值0,写出for-in循环结构,这里临时变量可以根据变量定义规则随便定义一个,range表示A的取值范围是1-100的整数。每次在取值范围中依次取出一个数,并将total的值刷新,total的值等于前一次循环后的total值加上本次取出的A的值,并输出最后一次total值。
知道这一点后我们可以进一步算出1-100之间偶数的总和。

total = 0
for A in range(2, 101,2):
    total = total + A
print(total)

这个方法只是改变取值的步长,也就是第二次取的值在前一次取值上加2。当然我们也可以融入分支结构来进行计算这个问题。

total = 0
for A in range(1,101):
    if A % 2 == 0:
        total = tatal + A
print(total)
2.for-in循环练习

1. 输入一个非负整数N,计算N!

total = 1
X = int(input('请输入一个非负整数:'))
for A in range(X, 1, -1):
    total *= A
print(total)

这道题和上面1-100求和的方式一样,只是累加改为累乘

2. 输入两个正整数,找出它们的最大公约数

a = int(input('请输入第一个数:'))
b = int(input('请输入第二个数:'))
if a > b:
    a, b = b, a    # Python中可以用这样的方式来交换两个变量的值
# 随便以一个输入的值开始向下循环,判断能否整除两个输入的值
for i in range(a, 0, -1):
    if b % i == 0 and a % i == 0:
        print(f'最大公约数为:{i}')
        # 终止循环
        break

公约数就是能同时整除几个整数的数。输入两个数后,我们将更小的一个数作为取值范围,因为更小的数肯定不能被整除。所以将a 赋为更小值,从a开始向0取值,如果遇到可以同时整除a, b的数,那么终止循环,这个数就是最大公约数。

3.while循环

如果要构造不知道具体循环次数的循环结构,我们推荐使用while循环。while循环通过一个能够产生或转换出bool值的表达式来控制循环,表达式的值为True则继续循环;表达式的值为False则结束循环。

基本结构

while     执行条件:
        条件成立执行的代码
        条件成立执行的代码

下面我们通过一个“计算三角形面积”的小游戏来看看如何使用while循环。规则是输入三角形三条边的长度,如果能构成三角形就计算周长和面积,如果不能构成三角形,提示用户重新输入,直到正确。

while True:
    a = float(input('a = '))
    b = float(input('b = '))
    c = float(input('b = '))
    if a + b > c and a + c > b and b + c > a:
        p = a + b + c
        half = p / 2
        area = (half * (half - a) * (half - b) * (half - c)) ** 0.5
        print(f'三角形周长为{p}')
        print(f'三角形面积为{area:.2f}')
        break
    else:
        print('不能构成三角形,请重新输入')

首先我们while后的循环条件设为True,此时该循环将会是一个死循环,如果没有break等跳出循环的条件话,该循环将会一直循环。首先让用户输入三个数字,判断该三条边能否组成三角形,如果能组成三角形,则输出周长和面积,并跳出死循环,否则重复循环。

同时我们也能使用while循环进行知道循环次数的计算。我们还是通过计算1-100的总和来看看while循环的使用

total = 0
counter = 1
while counter < 101:
    total += counter
    counter += 1
print(total)

counter计数器初始值为1,每循环一次,counter加1。当counter小于101时,总数等于上一次循环完后的总数加上本次counter数。直至循环结束,输出total。

4. break和continue

上面的代码中使用while True构造了一个条件恒成立的循环,也就意味着如果不做特殊处理,循环是不会结束的,这也就是常说的“死循环”。为了在用户猜中数字时能够退出循环结构,我们使用了break关键字,它的作用是提前结束循环。需要注意的是,break只能终止它所在的那个循环,这一点在使用嵌套循环结构时需要引起注意,下面的例子我们会讲到什么是嵌套的循环结构。除了break之外,还有另一个关键字是continue,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。

5. while循环练习

1.计算机出一个1到100之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点、小一点或猜对了),玩家只有7次机会,若7次机会后玩家还没有猜出,直接给出正确答案

import random
i = 0
# 计算机从1-100之间随机给出一个数字
answer = random.randrange(1, 101)
while True:
    i += 1
    num = int(input('请输入一个整数:'))
    if num < answer:
        print('大一点')
    elif num > answer:
        print('小一点')
    else:
        print('您猜对了')
        break
    if i == 7:
        print(f'智商不足请充值,正确数字为:{answer}')
        break

这道题由于不知道玩家具体几次会猜出数字,所以使用一个死循环进行。玩家输入一次数字后,计数器加一,达到7次后结束循环并提示正确数字。若玩家在7次以内输入数字,则给出对应提示。

6. 嵌套的循环结构

和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。下面的例子演示了如何通过嵌套的循环来输出一个乘法口诀表(九九表)。

for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{i}*{j}={i * j}', end='\t')
    print()

很显然,在上面的代码中,外层循环用来控制一共会产生9行的输出,而内层循环用来控制每一行会输出多少列。内层循环中的输出就是九九表一行中的所有列,所以在内层循环完成时,有一个print()来实现换行输出的效果。

以上就是Python学习第二天,Get It!

请添加图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python从入门到精通,100天就够了!(2)——分支结构与循环结构 的相关文章

随机推荐

  • [谦实思纪 02]整理自2023雷军年度演讲——《成长》(下篇)创业之旅(创业与成长)

    文章目录 谦实思纪 整理自2023雷军年度演讲 成长 下篇 创业之旅 创业与成长 0 写在前面 1 创业 创业与成长 1 1 找互补的朋友一起干 更容易成功 1 2 创业中必须要有领导者 核心思维 1 3 从失败开始 学海无涯 1 4 金山
  • STM32G070进行flash读写操作

    STM32G070的flash读写问题 STM32G070xx的flash分布如下图 打算将Page 63用于保存用户数据 问题 开始一直出现flash写入失败 从返回码来看是FLASH FLAG PGSERR 一直找不到原因 代码如下 d
  • android throw exception 原理,Android Throw Exception

    It depends if this Close can throw an exception then it still needs to be declared as being thrown or caught Often times
  • grid常用属性及属性值介绍

    文章目录 前言 一 grid布局是什么 二 常用简写 必会 2 1 grid 2 2 gap grid gap 2 3 grid area 2 4 grid template 2 5 place content 2 6 place item
  • 1359: [Baltic209]Candy

    题目链接 题目大意 tan90 题解 不存在的 我的收获 如何快速升级
  • protobuf与protoc-gen-go

    什么是protobuf Protobuf Protocol Buffer 是google 的一种数据交换的格式 它独立于语言 独立于平台 google 提供了多种语言的实现 java c c go 和 python 每一种实现都包含了相应语
  • Jmeter接口测试+压力测试

    jmeter是apache公司基于java开发的一款开源压力测试工具 体积小 功能全 使用方便 是一个比较轻量级的测试工具 使用起来非常简单 因为jmeter是java开发的 所以运行的时候必须先要安装jdk才可以 jmeter是免安装的
  • OkHttp的使用之{RequestBody、FormBody、MultipartBody}

    目录 0 相关文章 1 POST请求 1 1 RequestBody json数据提交 1 2 FromBody 表单提交 这种能满足大部分的需求 1 3 MultipartBody 文件上传 1 4 图片下载 文件下载 0 相关文章 Ok
  • 布隆过滤器(Bloom Filter)

    1 引言 通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景 一般想到的是将集合中所有元素保存起来 然后通过比较确定 链表 树 散列表 又叫哈希表 Hash table 等等数据结构都是这种思路 但是随着集合中元素的增加 我们需要的
  • 线程相关面试题

    1 ThreadPoolExecutor 线程池执行 有哪些常用的方法 1 执行线程池 submit excute 2 终止线程池 shutdown 3 判断线程是否终止 isShutdown 4 获取正在运行的线程数 getAcitive
  • 详解Python中字符串前“b”,“r”,“u”,“f”的作用

    1 字符串前加 u 例 u 我是含有中文字符组成的字符串 作用 后面字符串以 Unicode 格式 进行编码 一般用在中文字符串前面 防止因为源码储存格式问题 导致再次使用时出现乱码 2 字符串前加 r 例 r n n n n 表示一个普通
  • 视频稳像(Video Stabilization)

    原文 https blog csdn net hjl240 article details 52683738 开源 关键词 Video Stabilization 不错 https github com yaochih awesome vi
  • python中unittest+ddt的应用

    一 单个EXCEL执行 import unittest from class api login topup demo import http request from class api login topup http attr imp
  • 使用KIF进行功能性iOS UI测试

    开始使用KIF 从Github下载KIF源资产并将其放置在可以轻松找到的地方 或者 可以使用 Git 的子模块来获取本地使用的源代码 git 初始化 git submodule 添加 https github com kif framewo
  • c#的值类型和引用类型(拆装箱)

    1 值类型和引用类型 c 中所有的引用类型共同的基类是System Object 1 管理机制 值类型 操作系统负责 作用域结束时被操作系统自动释放 引用类型 垃圾回收器负责 2 内存分配 值类型 值类型实例总会被分配到变量声明的地方 声明
  • 计算机网络(3.6)数据链路层- PPP 协议的帧格式和工作状态

    PPP 协议的帧格式 PPP 帧的首部和尾部分别为 4 个字段和 2 个字段 标志字段F 0x7E 符号 0x 表示后面的字符是用十六进制表示 十六进制的7E的二进制表示是 01111110 地址字段A只置为0xFF 地址字段实际上并不起作
  • 托管函数和非托管函数如何互相传递ansi字符串?

    先来介绍两个预处理指令 pragma unmanaged pragma managed 这两个预处理指令 控制函数编译成托管函数 还是非托管函数 是函数级别的预控制指令 1 托管函数传送字符串给非托管函数 分三步走 a 先调用StringT
  • echars水状_Echarts饼状图属性设置

    标题 title text 学生生源地来源分布图 subtext 模拟数据 x 设置水平安放位置 默认左对齐 可选值 center left right number x坐标 单位px x center y 设置垂直安放位置 默认全图顶端
  • IPv6地址结构、地址分类以及表示方法

    IPv6地址的表示方法 IPv6地址总长度为128比特 通常分为8组 每组为4个十六进制数的形式 每组十六进制数间用冒号分隔 例如 FC00 0000 130F 0000 0000 09C0 876A 130B 这是IPv6地址的首选格式
  • Python从入门到精通,100天就够了!(2)——分支结构与循环结构

    文章目录 一 分支结构 选择结构 1 分支结构初体验 2 分支结构练习 二 循环结构 1 for in 循环 2 for in 循环练习 3 while 循环 4 break和continue 5 while 循环练习 6 嵌套的循环结构