【人生苦短,我学 Python】(9)分支判断和循环

news2024/11/24 19:00:14

目录

  • 简述 / 前言
  • 1. 顺序结构
  • 2. 选择结构
    • 2.1 单分支
    • 2.2 双分支
    • 2.3 多分支
  • 3. 循环结构
    • 3.1 for 循环
      • 3.1.1 range()
    • 3.2 while 循环
      • 3.2.1 break 语句
      • 3.2.1 continue 语句
    • 3.3 死循环
  • 4. enumerate 函数
  • 5. zip 函数
  • 文章传送门

简述 / 前言

前面讲了输入、输出和文件的读写,但是一个程序怎么写呢?总不能都是一行行输入、赋值、输出语句吧,那么下面将引出每个编程语言都会有的,且很重要的又基础的内容:顺序结构选择结构循环结构

其实这章应该要在讲完数据类型之后引出的~

1. 顺序结构

顾名思义,就是从第一行写到最后一行,且每行代码都没有缩进,如下面这个代码:

import sys

name = str(sys.argv[1])
age = int(sys.argv[2])

print(f'name: {name}, age: {age}')

都是直接按照顺序执行代码的就是顺序结构,但是在真正的开发中,这种结构很少见。

2. 选择结构

选择结构有3中形式:单分支、双分支和多分支。

2.1 单分支

格式:只有一个 if 语句的。

if (条件表达式):
    语句块

示例:

>>> if True:
...     print('小邓在森林')
...
小邓在森林

2.2 双分支

格式:只有一个 if 语句和一个 else 语句的。

if (条件表达式):
    语句块
else:
    语句块

示例:
编写 CSDN.py,代码如下(判断输出的字符串是不是小邓在森林):

import sys

name = sys.argv[1]
if name == "小邓在森林":
    print('我是小邓在森林')
else:
    print('我不是小邓在森林')

在终端(terminal)中输入:python CSDN.py 小邓在森林

D:\MyCode\Python_Code\PyCharm>python CSDN.py 小邓在森林
我是小邓在森林

在终端(terminal)中输入:python CSDN.py 小邓在森林a

D:\MyCode\Python_Code\PyCharm>python CSDN.py 小邓在森林a
我不是小邓在森林

2.3 多分支

格式:只有一个 if 语句、一个 else 语句,但有不止1个elif 语句的。

if (条件表达式):
    语句块
elif (条件表达式):
    语句块

...

elif (条件表达式):
    语句块
else:
    语句块

示例:
编写 CSDN.py,代码如下(判断输出的字符串是不是小邓在森林):

import sys

age = int(sys.argv[1])	# 注意这里要转为int类型,默认命令行参数是以字符串类型传入的!!!
if age == 20:
    print('我到20岁啦!')
elif age == 21:
    print('我到21岁啦~')
elif age == 22:
    print('我到22岁啦^_^')
else:
    print('我忘了自己几岁噜...')

在终端(terminal)中输入(具体输入什么见下面代码):

D:\MyCode\Python_Code\PyCharm>python CSDN.py 20
我到20岁啦!

D:\MyCode\Python_Code\PyCharm>python CSDN.py 21
我到21岁啦~

D:\MyCode\Python_Code\PyCharm>python CSDN.py 22
我到22岁啦^_^

D:\MyCode\Python_Code\PyCharm>python CSDN.py 23
我忘了自己几岁噜...

3. 循环结构

循环结构就有 forwhile

3.1 for 循环

格式

for 变量 in 对象集合:
    语句块

示例:

>>> for year in range(2020, 2024):
...     print(year)
...
2020
2021
2022
2023
>>> for year in [2020, 2021, 2022, 2023, 2024]:
...     print(year)
...
2020
2021
2022
2023
2024

这里的对象集合可以是:字符串、列表、元组、字典、文件、迭代器或者生成器。

3.1.1 range()

刚刚上面的代码用到了 Python 内置的 range() 方法。

格式range(start, stop[, step]),从start开始,到stop结束(不包含stop)【就是数学中的左闭右开区间】。如果指定了可选的步长step,则序列按步长增长!

>>> list(range(2020, 2024))	# 2020~2023
[2020, 2021, 2022, 2023]
>>> list(range(2020, 2024, 2))	# 2020~2023且中间隔了一个再取
[2020, 2022]
>>> list(range(2023, 2019, -1))	# 2020~2023的逆序
[2023, 2022, 2021, 2020]
>>> list(range(2023, 2019, -2))
[2023, 2021]

注意:如果步长为负数,表示逆置整个区间,取绝对值就是步长!

3.2 while 循环

格式:当满足给定的条件时,就会一直运行,当条件不满足时才会结束循环,所以我们一般会搭配 break 语句一起使用!

while (条件表达式):
    语句块

示例:

num = 1
while num <= 5:
    print(num)
    num += 1
>>> num = 1
>>> while num <= 5:	# 当 num 大于 5 时就会结束循环
...     print(num)
...     num += 1
...
1
2
3
4
5

3.2.1 break 语句

当我们想提前退出循环时就使用 break 语句。

num = 1
while num <= 5:     # 当 num 大于 5 时就会结束循环
    if num == 3:    # 当 num 等于 3 时就会提前结束循环
        break
    print(num)
    num += 1
>>> num = 1
>>> while num <= 5:     # 当 num 大于 5 时就会结束循环
...     if num == 3:    # 当 num 等于 3 时就会提前结束循环
...         break
...     print(num)
...     num += 1
...
1
2

注意:**break语句只应用于最里层的语句,即break语句只能跳出最近的一层循环!**详见下面例子:

num = 1
while num <= 8:
    while num <= 5:  # 当 num 大于 5 时就会结束循环
        if num == 3:  # 当 num 等于 3 时就会提前结束循环
            break
        print(f'  里层循环 num = {num}')
        num += 1
    print(f'外层循环 num = {num}')
    num += 1
>>> num = 1
>>> while num <= 8:
...     while num <= 5:  # 当 num 大于 5 时 就会结束循环
...         if num == 3:  # 当 num 等于 3 时就会提前结束循环
...             break
...         print(f'  里层循环 num = {num}')

...         num += 1
...     print(f'外层循环 num = {num}')
...     num += 1
...
  里层循环 num = 1
  里层循环 num = 2
外层循环 num = 3
  里层循环 num = 4
  里层循环 num = 5
外层循环 num = 6
外层循环 num = 7
外层循环 num = 8

虽有 break 语句,但是最后还是输出了 8,这是因为外层循环没有被提前终止!

3.2.1 continue 语句

如果你不想完全跳出整个循环,而只是想跳过这一次的循环,那就用 continue 语句。

for year in range(2020, 2024):
    if year == 2021:	# 跳过2021年
        continue
    print(year)
>>> for year in range(2020, 2024):
...     if year == 2021:	# 跳过2021年
...         continue
...     print(year)
...
2020
2022
2023

一般 while 搭配 break,for 搭配 continue, 当然两者也可以交换,主要看你要完成的功能是什么!

3.3 死循环

程序一直运行不停止,即循环条件永远为真:
【谨慎运行,命令行可以使用快捷键 <Ctrl>+<c> 终止当前程序的运行】

while True:
    print('小邓在森林')

在这里插入图片描述

4. enumerate 函数

  • 如果需要在循环中使用索引下标访问集合元素,则可以使用内置的enumerate()函数;
  • enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,并返回一个可迭代对象,故在for循环当中可直接迭代下标和元素。
for index, year in enumerate(range(2020, 2024)):
    print(index, ' --> ', year)
>>> for index, year in enumerate(range(2020, 2024)):
...     print(index, ' --> ', year)
...
0  -->  2020
1  -->  2021
2  -->  2022
3  -->  2023

5. zip 函数

zip()函数将多个可迭代的对象中对应的元素打包成一个个元组,然后返回一个可迭代对象。如果元素个数不一致,则返回列表长度与最短的对象相同。

>>> a = [1, 2, 3, 4, 5]
>>> b = [6, 7, 8, 9, 10]
>>> list(zip(a, b))
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]
>>> a, b = zip(*zip(a, b))
>>> a, b
((1, 2, 3, 4, 5), (6, 7, 8, 9, 10))

利用运算符*,还可以实现将元组解压为列表。

文章传送门

上一篇文章:【人生苦短,我学 Python】(8)文件的读写和过滤器
下一篇文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1325853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UML】第5篇 UML中的视图和图

目录 一、视图和图 二、图的种类 2.1 结构图 2.2 行为图 图是UML中最重要的概念了&#xff0c;起码我是这么认为。 上篇关于低代码的文章&#xff0c;我也说了&#xff0c;未来也许AI编码&#xff0c;我们更重要的工作&#xff0c;是能够为业务进行建模&#xff0c;拆解&a…

【51单片机系列】C51中的中断系统扩展实验

本文是关于51单片机中断系统的扩展实验。 文章目录 一、 扩展实验一&#xff1a;使用外部中断0控制蜂鸣器&#xff0c;外部中断1控制直流电机二、扩展实验二&#xff1a;修改定时器初值&#xff0c;设定3秒钟的定时时间让LED模块闪烁三、扩展实验三&#xff1a;使用定时器1和数…

KBP310-ASEMI适配高端电源KBP310

编辑&#xff1a;ll KBP310-ASEMI适配高端电源KBP310 型号&#xff1a;KBP310 品牌&#xff1a;ASEMI 封装&#xff1a;KBP-4 最大平均正向电流&#xff1a;3A 最大重复峰值反向电压&#xff1a;1000V 产品引线数量&#xff1a;4 产品内部芯片个数&#xff1a;4 产品内…

哈希算法专栏二《力扣题目练习》

引言 在了解了哈希表的基础理论之后&#xff0c;我们就可以开始进行刷题实战了。下面是我在力扣上找的一些题目&#xff0c;认真刷完并理解下面的题目&#xff0c;相信读者至少可以初步掌握哈希算法的思想了。 LeetCode242有效的字母异位词 242. 有效的字母异位词 已解答 简…

智能化安防与监控:全球发展、挑战与未来趋势

导言 智能化安防与监控系统在全球范围内得到广泛应用&#xff0c;成为社会安全和公共管理的重要工具。本文将深入研究其发展历程、遇到的问题及解决过程、未来的可用范围&#xff0c;以及在各国的应用和未来的研究趋势&#xff0c;以探讨在哪些方面能取胜&#xff0c;并在哪些方…

简易实现 STL--list

实现 list 的主要思想及过程 首先&#xff0c;实现过程中的所有代码必须放在自己定义的命名空间中。 定义一个结点的结构体类模板&#xff0c;结点的数据类型就应该是模板类型 T&#xff0c;定义的 next指针和 prev指针都应该是模板指针类型&#xff0c;并且结构体类中药有构…

git的使用思维导图

源文件在github主页&#xff1a;study_collection/cpp学习/git at main stu-yzZ/study_collection (github.com)

力扣:77. 组合(回溯, path[:]的作用)

题目&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a; 输入&…

MS5541/MS5542,高精度DAC,2.7V 到 5.5V、串行输入、电压输出、16 位数模转换器,可替代AD5541

MS5541/MS5542 是一款单通道、 16 位、串行输入、电压 输出的数模转换器&#xff0c;采用 2.7V 至 5.5V 单电源供电&#xff0c;输出范围 为 0V 至 V REF 。在输出范围内保证单调性&#xff0c;在温度范围为 -40 C 至 85 C 能够提供 1LSB INL 的 14 位精度。…

pycharm git 版本回退

参考 https://blog.csdn.net/qq_38175912/article/details/102860195 yoyoketang 悠悠课堂

PLC物联网,实现工厂设备数据采集

随着工业4.0时代的到来&#xff0c;物联网技术在工厂设备管理领域的应用日益普及。作为物联网技术的重要一环&#xff0c;PLC物联网为工厂设备数据采集带来了前所未有的便捷和高效。本文将围绕“PLC物联网&#xff0c;实现工厂设备数据采集”这一主题&#xff0c;探讨PLC物联网…

合并一个excel文件中的多个sheet

import pandas as pd #要合并的文件路径 filepath/Users/kangyongqing/Documents/kangyq/202311/班均及合班储备/最后校验/二批次组班/ file1z小班合班方案_2012&#xff08;1&#xff09;.xlsx #获取文件d的所有sheet名 df1pd.read_excel(filepathfile1,sheet_nameNone,engine…

Graylog配置日志保留策略

找了半天没找到说的清楚的&#xff0c;只能抠官方文档 graylog的归档&#xff08;日志持久化&#xff09;只有付费版才能用&#xff0c;所以日志只能存在es中 1.理解官方给出的几个概念 轮转策略 (Index Rotation Strategy): 轮转策略定义了何时创建新的索引以及何时关闭旧的索…

C语言-> 文件操作(函数满屏)

系列文章目录 前言 ✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青_C语言,数据结构,函数-CSDN博客 目的&#xff1a;学习文件操作&#xff0c;即…

gitee的学习

1.git下载 下载地址&#xff1a;https://git-scm.com/ 2.建立远程仓库 访问&#xff1a;gitee.com 在此网站上创建 3.本地操作 在本地找一个任意文件&#xff0c;克隆git 执行命令&#xff1a;git clone https://gitee.com/beijing-jiaxin-times_0/test_zsx_cang_ku.git …

变分自动编码器【03/3】:使用 Docker 和 Bash 脚本进行超参数调整

一、说明 在深入研究第 1 部分中的介绍和实现&#xff0c;并在第 2 部分中探索训练过程之后&#xff0c;我们现在将重点转向在第 3 部分中通过超参数调整来优化模型的性能。要访问本系列的完整代码&#xff0c;请访问我们的 GitHub 存储库在GitHub - asokraju/ImageAutoEncoder…

[c]用指针进行四个数排序

#include<stdio.h> void swap(int*p1,int*p2)//定义函数&#xff0c;实现两个数值交换 {int temp;temp*p1;*p1*p2;*p2temp; } void psort( int *pa, int *pb,int *pc,int *pd) {int i1;for(i1;i<3;i)//对四个数排序&#xff0c;至少3次循环&#xff0c;交换过后是升序…

海康威视IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)

漏洞介绍 海康威视IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 Hikvision Intercom Broadcasting System 3.0.3_20201113_RELEASE(HIK)版本存在操作系统命令注入漏洞&#xff0c;该漏洞源于文件/ph…

跨境电商独立站有哪些优势,要如何做?

跨境电商独立站是指面向海外市场的电商网站&#xff0c;具有以下优势&#xff1a; 自主品牌 搭建跨境电商独立站可以通过自主品牌的打造&#xff0c;提升品牌的知名度和影响力&#xff0c;同时也可以在海外市场建立起更加稳定的品牌形象。 自主掌控 跨境电商独立站可以自主掌…

Python算法例19 创建最大数

1. 问题描述 给定两个长度分别是m和n的数组&#xff0c;数组的每个元素都是数字0~9&#xff0c;从这两个数组当中选出k个数字来创建一个最大数&#xff0c;其中k满足k&#xff1c;mn&#xff0c;选出来的数字在创建最大数里的位置必须与在原数组内的相对位置一致。返回k个元素…