Python基础学习笔记(五)——选择结构与循环结构

目录

  • 程序的组织结构
  • 条件
  • 选择结构
    • 1. 单分支结构
    • 2. 双分支结构
    • 3. 多分支结构
    • 4. 嵌套(分支)结构
    • 5. 无内容执行
    • 6. 条件表达式
  • 循环结构
    • 1. 可迭代对象
    • 2. range()函数
    • 3. for循环语句
    • 4. while循环语句
    • 5. 结束语句

程序的组织结构

  程序的组织结构主要有以下三种:

  • 顺序结构:代码按照从上到下的顺序依次执行,没有条件判断或循环跳转,每一条语句都会被执行且只执行一次,是程序中最简单、最基础的结构。
  • 选择(分支)结构:根据条件判断选择执行不同的代码块。
  • 循环结构重复执行一段代码,直到满足退出条件或者不满足循环条件。


条件

  通常指用于控制程序流程的逻辑表达式

  这些表达式在条件语句中只取布尔值,所以常出现关系、身份、成员、逻辑这类返回bool类型的运算符,但这不意味着条件一定是结果为bool的表达式。

  Python是一门面向对象的编程语言,Python一切皆对象,而对象皆有布尔值。也就是说,条件不一定是布尔类型的
  即数据类型篇提到过的 任何类型的数据都能转化为布尔型。以下用简单的选择语句进一步说明:

# 对象皆有布尔值
print(bool(1))
print(bool(0))# 条件可以是任意对象
if 1 < 2:print('dandelion')if 1:print('02')
True
False
dandelion
02

  绝大部分的对象的布尔值均为True,仅有一些特殊对象的布尔值为False,如:空值,没有元素的组合类型数据(空字符串、空列表、空元组、空字典、空集合)

False, 0, None, '', []/list(), ()/tuple(), {}/dict(), set()


选择结构

1. 单分支结构

  只通过if语句实现:当且仅当if后的条件的布尔值为True时,执行相应的代码块。

condition = 'dandelion'
if condition:print(condition)
dandelion

  代码块需要缩进,通常使用4个空格或1个制表符\t(即键盘上的TAB)进行缩进。

2. 双分支结构

  通过if...else...语句实现:若if后的条件的布尔值为True,执行if对应的代码块;若if后的条件的布尔值为False,执行else对应的代码块。

# 判断整数奇偶性
num = int(input('give an integer:\n'))
if num & 1:print('odd')
else:print('even')

  上面的代码通过双分支结构实现了奇偶性判断的功能:1的二进制只有最低位是1,其余位都是0,这意味着任何整数与1按位与的二进制结果只有一位,即01。而奇数与偶数的一个典型区别就是在于它们的二进制的最低位不同,奇数(odd)的最低位是1,偶数(even)的最低位是0。由于01的布尔值不同,即可实现。

3. 多分支结构

  通过if...elif...else...语句实现:从上至下依次判断ifelif后的条件,若有一个条件为True,便执行相应的代码块,不再判断后续的条件;若条件全为False,则执行else对应的代码块。

grade = float(input('give your score:\n'))
if 90 <= grade <= 100:print('A')
elif 80 <= grade < 90:print('B')
elif 70 <= grade < 80:print('C')
elif 60 <= grade < 70:print('D')
else:print('fail or valid')

  上面的代码通过多分支结构实现了成绩分级的功能。值得一提的是,这里使用了链式比较,比如说,下面给出两个条件是等价的:

90 <= grade <= 100
grade <= 100 and grade >= 90


4. 嵌套(分支)结构

  程序的结构允许多层嵌套。这意味着在一个条件语句的代码块中可以使用另一个条件语句,从而根据更复杂的条件组合执行不同的代码块。

membership = input('Are you a membership?	y/n\n')
fee = float(input('Input your spending:\n'))
# 外分支结构:判断用户是否为会员
if membership == 'y':# 内分支结构:判断消费额度if fee >= 2000:print('disbursement:', fee * 0.8)elif fee >= 1000:print('disbursement:', fee * 0.9)else:print('disbursement:', fee)
elif membership == 'n':print('disbursement:', fee * 1.1)
else:print('something is wrong')

  上面的代码通过嵌套分支结构实现了折扣计价的功能。

5. 无内容执行

  当执行内容未确定,或者不想要执行任何内容时,由于代码块不能为空,可以用pass命令让程序跳过该处得以正常运行

if input('guess who I am?\n') == 'dandelion':print('you are right')
else:pass


6. 条件表达式

  条件语句的简化表达式:if执行语句 if 条件 else else执行语句

# 比较数值大小
num1 = float(input('num1 = '))
num2 = float(input('num2 = '))print('num1 >= num2') if num1 >= num2 else print('num2 >= num1')

  当代码块的执行语句调用的函数相同时,则有:执行函数(if执行参数 if 条件 else else执行参数)

print('num1 >= num2' if num1 >= num2 else 'num2 >= num1')


循环结构

1. 可迭代对象

  所有可以用循环语句遍历的对象,例如所有的组合数据类型。判断一个对象是否为可迭代对象的代码如下:

from collections.abc import Iterable
# 常见的可迭代对象包括字符串、列表、元组、集合、字典,以及range类对象
print(isinstance([], Iterable), isinstance({}, Iterable), isinstance((), Iterable))
True True True


2. range()函数

  返回一个在指定区间上具有确定步长整数序列。它有三个参数:

  • start=0可选参数,序列的起始值,区间的闭端点默认为0
  • stop :必选参数,序列的结束值,区间的开端点
  • step=1可选参数,序列的每个数字之间的差值默认为1
# range(stop) = [0,1,…,stop-1]
r = range(10)
print(r)
print(list(r))	# range对象可转化为列表# range(start,stop) = [start,start+1,…,stop-1]
print(list(range(1, 10)))# range(start,stop,step) = [start,start+step,…,start+(stop-start)//step*step]
print(list(range(1, 10, 2)))# step<0:逆向生成序列
print(list(range(6, 3, -1)))
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][1, 2, 3, 4, 5, 6, 7, 8, 9][1, 3, 5, 7, 9][6, 5, 4]

  需要注意的是,step = 0时会报错;而在正步长start > stop,或在负步长start < stop,则会返回空列表

print(list(range(4, 3)))
print(list(range(4, 3, 0)))
[]
ValueError: range() arg 3 must not be zero

  range的优势是:不论创建的序列多长,占用的内存空间几乎相同,因为它返回的range类对象只存储了三个参数属性,调用时才开始计算序列元素

3. for循环语句

  for循环格式为:for 变量 in 可迭代对象 : 循环体

  创建一个(或多个)局部变量,这个变量的作用域限制在for循环内。每轮循环开始时,先从可迭代对象中依序取出一个元素,将其值赋予变量,这个过程称为遍历
  遍历成功后,则执行相应的代码块,然后进入下一轮循环。这个代码块称为循环体该变量仅在循环体中可调用循环条件为:可迭代对象中仍有下一个值;否则循环结束。

  以下为演示程序 输出100~999之间的水仙花数

水仙花数(Narcissistic number):每个位上的数字的 n 次幂之和等于它本身的 n 位数(n≥3)。
例如,153 = 1^3 + 5^3 + 3^3。

# 规定区间
for i in range(100, 1000):# 个位a = i % 10# 十位b = i // 10 % 10# 百位c = i // 100# 嵌套:内分支结构if i == a**3+b**3+c**3:print(i)
153
370
371
407

  若声明的临时变量不被调用,则语句仅用于设置执行次数。这种情况下,也可以选择不创建变量,如:

# 无效变量
for item in range(3):print('重要的事情说三遍')# 无变量 for循环
for _ in range(3):print('重要的事情说三遍')
重要的事情说三遍
重要的事情说三遍
重要的事情说三遍


4. while循环语句

  while循环格式为:while 循环条件 : 循环体
  先判断循环条件,条件为True则执行循环体,并进入下一轮循环;任一轮判断中,条件为False,则跳出循环。在这个过程中,判断N+1次,执行N次。

# 等差数列求和
start = 1
step = 1
stop = 10
sum_ = 0
while start <= stop:sum_ += startstart += step
print(sum_)		# 55

  while循环是for循环的功能拓展,但在遍历取值上,for循环比while循环更简洁。

5. 结束语句

  break语句可以跳出本层循环,若存在外层循环,则会进入下一轮 外层 循环
  continue语句可以结束本轮循环,进入下一轮 本层 循环

# 判断列表中的字符串是否存在大写字母
lst = ['aSefgx', 'spoej', 'frQDxf']
# 判断结束标志
flag = 0
# 遍历列表
for i in lst:# 遍历字符串for j in i:# 大写字母的ascll码区间if 65 <= ord(j) <= 90:# 存在print(True)# 判断结束flag = 1# 跳出内层循环,结束对该字符串的遍历break# 判断已结束if flag:# 标志初始化flag = 0# 结束本轮外层循环,继续对列表的遍历continue# 不存在,本轮外层循环自然结束print(False)

  以上代码用嵌套循环分支结构实现了大写字母检测,并演示了如何使用结束语句,在合适的情况结束循环

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

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

相关文章

Flutter 中的 DraggableScrollableSheet 小部件:全面指南

Flutter 中的 DraggableScrollableSheet 小部件&#xff1a;全面指南 Flutter 提供了多种展示和交互数据的方式&#xff0c;其中 DraggableScrollableSheet 是一个功能丰富的组件&#xff0c;它允许用户通过拖拽操作来展开和隐藏一个可滚动的面板。这个小部件非常适合实现如评…

新媒体运营如何抓住热点? 沈阳新媒体运营培训

01.如何来寻找热点 热点之所以称为热点&#xff0c;就是它的实时性强&#xff0c;一般情况下我们将热点分为常规型热点和突发型热点&#xff08;社会型事件&#xff09;&#xff0c;但是对于新媒体运营来说&#xff0c;常规型热点是可以提前知晓的&#xff0c;可以预先策划的&…

树形结构-数据表模型

路径枚举模型 实现的无级树形列表 分类表 CREATE TABLE categories (name CHAR(10) NOT NULL,id CHAR(1) NOT NULL PRIMARY KEY,path VARCHAR(500) NOT NULL ); 加上 邻接表 的特性 CREATE TABLE categories (name CHAR(10) NOT NULL,id INT NOT NULL PRIMARY KEY,path VARC…

MySQL5个查询

# 总查询 EXPLAIN SELECT * FROM city; # 范围查询 EXPLAIN SELECT * from city where ID>5 and ID<20; #主键查询 EXPLAIN SELECT * from city where ID5; # 索引查询 EXPLAIN SELECT * from city where CountryCodeNLD; # 普通索引 EXPLAIn SELECT * from cit…

7 Series FPGAs Integrated Block for PCI Express IP核简介

7 Series FPGAs Integrated Block for PCI Express IP核是Xilinx公司7系列FPGA中集成的PCI Express&#xff08;PCIe&#xff09;IP核模块&#xff0c;是一个可扩展的、高带宽的、可靠的串行互联构建块&#xff0c;用于与Xilinx的Zynq-7000 SoC和7系列FPGA配合使用。它支持1-la…

【算法】栈——逆波兰表达式求值

题解&#xff1a;逆波兰表达式求值(栈算法) 目录 1.题目2.题意2.1逆波兰表达式2.2向零截断 3.题解4.总结 1.题目 题目链接&#xff1a;LINK 2.题意 这个题目种涉及一些概念&#xff0c;应当适当说一下。 2.1逆波兰表达式 即后缀表达式&#xff0c;是一种数学表达式的表达…

.cjs 与 .js 后缀名,有什么不一样

.cjs 和 .js 后缀名在 Node.js 中表示不同的模块系统。主要区别在于它们分别使用 CommonJS 和 ECMAScript 模块系统。下面是它们的主要区别&#xff1a; .cjs&#xff1a;这个后缀名表示使用 CommonJS 模块系统。CommonJS 是 Node.js 最早采用的模块系统&#xff0c;它支持 re…

全自动机器学习AutoML高效预测时间序列

大家好&#xff0c;时间序列数据是许多现实世界问题的核心&#xff0c;例如预测能源消耗、气象预报、库存管理。传统上&#xff0c;使用专门的时间序列模型如Prophet来对此类数据进行建模和预测。然而&#xff0c;通过将时间序列数据转换为表格格式&#xff0c;可以利用更广泛的…

202103青少年软件编程(Python)等级考试试卷(四级)

第 1 题 【单选题】 10 个人站一列, 分苹果, 问第 10 个人分到多少个苹果, 他说比前面一个人多分到 2 个,依次往前, 都说比前面一个人多分到 2 个, 最后问第一个人, 他说分到 10 个苹果。 用以下函数求第 10 个人分到的苹果数, 则应补充选项为? ( ) def apple(n):…

【全开源】多场馆场地预定小程序源码(ThinkPHP+FastAdmin+UniApp)

场馆场地预定小程序源码一款基于ThinkPHPFastAdminUniApp开发的多场馆场地预定小程序&#xff0c;提供运动场馆运营解决方案&#xff0c;适用于体育馆、羽毛球馆、兵乒球馆、篮球馆、网球馆等场馆&#xff08;高级版&#xff09;

Solved problem: The number of elements in the character array

Problem: 未解决的问题&#xff1a;字符数组中元素的个数-CSDN博客 Solution: Add \0 at the end of the character array More detailed content can be found in the link below. Sizeof and Length of character array-CSDN博客

如何将word插入的形状转成图片(高清)导出?

文章目录 前言&#xff08;不感兴趣可以直接看正文&#xff09;一、新建画布二、插入形状三、复制四、粘贴为图片五、另存为总结 前言&#xff08;不感兴趣可以直接看正文&#xff09; 因为我毕业论文里的图片刚开始使用画图软件画的&#xff0c;但到后期论文即将胶印的时候&a…

HarmonyOS interface router scale pageTransition SlideEffect.Left ArkTS ArkUI

&#x1f3ac;️create Component export default struct TitleBar {build(){Row(){Text(transition).fontSize(30fp).fontColor(Color.White)}.width(100%).height(8%).backgroundColor(#4169E1).padding({left:10})}}&#x1f39e;️interface export interface IList{ti…

GitLab的原理及应用详解(八)

本系列文章简介&#xff1a; 随着软件开发的不断进步和发展&#xff0c;版本控制系统成为了现代软件开发过程中不可或缺的一部分。而GitLab作为其中一种流行的版本控制工具&#xff0c;在软件开发领域享有广泛的应用。GitLab不仅提供了强大的版本控制功能&#xff0c;还集成了项…

echarts点击柱状图携带参数跳转页面

getBarCharts() {let that = thislet barWidth = 20let manColors = []let womanColors = []let nowTime = let lastTime = let option = {//提示框tooltip: {trigger: axis,formatter: function(p) {let div = `${p[0].name}<br/>${p[0].seriesName}:${p[0].value}<b…

EXPLAIN执行计划详解

EXPLAIN 是 MySQL 中的一个非常实用的命令&#xff0c;主要用于分析 SQL 查询语句的执行计划&#xff08;Query Execution Plan&#xff0c;QEP&#xff09;。通过这个命令&#xff0c;用户可以获取到数据库引擎如何执行特定的 SQL 语句的详细信息&#xff0c;这对于优化查询性…

【星海随笔】微信小程序(三)

网络数据请求 1.小程序中网络数据请求的限制 出于安全性方面的考虑,小程序官方对 数据接口的请求 做出了如下 两个限制: ① 只能请求 HTTPS 类型的接口 ② 必须将 接口的域名 添加到 信任列表 中 微信小程序只能请求 https 类型的接口 且需要请求的域名必须提前进行设置后,才可…

DLRover:蚂蚁集团开源的AI训练革命

在当前的深度学习领域&#xff0c;大规模训练作业面临着一系列挑战。首先&#xff0c;硬件故障或软件错误导致的停机时间会严重影响训练效率和进度。其次&#xff0c;传统的检查点机制在大规模训练中效率低下&#xff0c;耗时长且容易降低训练的有效时间。资源管理的复杂性也给…

Codigger编码场景介绍(二):驾驶舱场景(Cockpit)

Codigger&#xff0c;一个专为开发人员设计的工具&#xff0c;致力于为不同的开发场景提供最佳的切换体验。Codigger囊括了多种场景&#xff0c;如传统场景、调试场景、设计器场景、驾驶舱场景以及纯净场景等。在上一篇文章中&#xff0c;我们介绍了传统场景模式&#xff0c;今…

数据结构_栈在括号匹配中的应用_代码

学习笔记 #include<stdio.h> #include<stdlib.h> #include<string.h>#define MaxSize 10 typedef struct{char data[MaxSize];int top; }SqStack;//初始化栈 void InitStack(SqStack &S){S.top 0; } //判断栈是否为空 bool StackEmpty(SqStack S){if (…