当前位置: 首页 > news >正文

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)

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

相关文章:

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

目录 程序的组织结构条件选择结构1. 单分支结构2. 双分支结构3. 多分支结构4. 嵌套&#xff08;分支&#xff09;结构5. 无内容执行6. 条件表达式 循环结构1. 可迭代对象2. range()函数3. for循环语句4. while循环语句5. 结束语句 程序的组织结构 程序的组织结构主要有以下三种…...

Vue插槽solt如何传递具名插槽的数据给子组件?

在Vue中&#xff0c;你可以通过作用域插槽&#xff08;scoped slots&#xff09;来传递数据给子组件。这同样适用于具名插槽。首先&#xff0c;你需要在子组件中定义一个具名插槽&#xff0c;并通过v-slot指令传递数据。例如&#xff1a; 子组件&#xff08;ChildComponent.vu…...

小程序-收货地址管理模块实现

页面结构代码&#xff1a; address-form.vue --->新建地址和修改地址页面 <template><view class"content"><form><!-- 表单内容 --><view class"form-item"><text class"label">收货人</text>…...

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

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

pip(包管理器) for Python

pip是什么 pip是Python的包安装程序&#xff0c;即python包管理器。您可以使用 pip 从Python包索引和其他索引安装包。 1. pip 安装 python 包 pip install 包名 例如&#xff1a;pip install pymssql &#xff1a; 使用pip安装数据库驱动包 pymssql 2.pip 卸载 python 包 pi…...

Ubuntu上安装Maven

在Ubuntu上安装Maven的步骤如下&#xff1a; 更新包索引&#xff1a; sudo apt update 安装Maven&#xff1a; sudo apt install maven 验证安装是否成功&#xff1a; mvn -version 以上步骤将会安装Maven并添加到系统路径中&#xff0c;你可以通过运行mvn -version来验…...

java中使用svnkit实现文件的版本管理

java中使用svnkit实现文件的版本管理 一、引入svnKit依赖二、初始化仓库工厂类二、使用svnkit创建本地存储仓库三、svn基本原子操作四、通过原子方法实现简单svn相应操作 一、引入svnKit依赖 <dependency><groupId>org.tmatesoft.svnkit</groupId><artifa…...

了解 Linux 网络卡绑定:提高网络性能与冗余性

在现代 IT 基础设施中&#xff0c;网络性能和可靠性至关重要。对于许多企业和个人用户来说&#xff0c;确保网络的高可用性和冗余性是首要任务之一。Linux 提供了一个强大的解决方案——网络卡绑定&#xff08;Network Interface Card Bonding&#xff0c;简称 NIC Bonding&…...

2024年618购物狂欢节即将来袭!精选五款超值入手数码好物!

618购物狂欢盛宴即将落幕&#xff0c;是时候展现我们的购物智慧了&#xff01;在追求价格优惠的同时&#xff0c;我们更应看重商品的品质与实用性。面对琳琅满目的选择&#xff0c;如何筛选出真正值得拥有的好物呢&#xff1f;为了让大家的购物之旅更加轻松愉快&#xff0c;以下…...

中国AI独角兽资本大冒险

成立不过一年多时间&#xff0c;月之暗面已然成为中国大模型赛道上&#xff0c;最炙手可热的明星公司。 5月21日&#xff0c;华尔街见闻获悉&#xff0c;月之暗面将按照投前估值30亿美元&#xff08;合217.3亿人民币&#xff09;进行融资&#xff0c;完成后依然会是当前中国估…...

项目十二:简单的python基础爬虫训练

许久未见&#xff0c;甚是想念&#xff0c;今日好运&#xff0c;为你带好运。ok&#xff0c;废话不多说&#xff0c;希望这门案例能带你直接快速了解并运用。&#x1f381;&#x1f496; 基础流程 第一步&#xff1a;安装需要用到的requests库&#xff0c;命令如下 pip inst…...

OpenGL学习入门及开发环境搭建

最近学习OpenGL开发&#xff0c;被各种openGL库搞得晕头转向&#xff0c;什么glut, glew glfw glad等等。 可以参考这边博客:OpenGL 下面的 glut freeglut glfw 都是个啥_glx wgl的中文-CSDN博客 glfw是glut的升级版&#xff0c;跨平台的主要处理窗口 事件相关。 glad是glew…...

three.js能实现啥效果?看过来,这里都是它的菜(08)

在Three.js中实现旋转动画的原理是通过修改对象的旋转属性来实现的&#xff0c;通常使用渲染循环&#xff08;render loop&#xff09;来更新对象的旋转状态&#xff0c;从而实现动画效果。 具体的原理包括以下几个步骤&#xff1a; 创建对象&#xff1a;首先创建一个需要旋转…...

SpringBoot(九)之整合mybatis

SpringBoot&#xff08;九&#xff09;之整合mybatis 文章目录 SpringBoot&#xff08;九&#xff09;之整合mybatisSpring整合mybatis回顾1. 引入依赖2. mybatis-config.xml SpringBoot整合mybatis1.引入依赖2. 配置数据源和 MyBatis 属性3. 配置 Mapper 接口4. 配置mapper.xm…...

【实战教程】使用Spring AOP和自定义注解监控接口调用

一、背景 随着项目的长期运行和迭代&#xff0c;积累的功能日益繁多&#xff0c;但并非所有功能都能得到用户的频繁使用或实际上根本无人问津。 为了提高系统性能和代码质量&#xff0c;我们往往需要对那些不常用的功能进行下线处理。 那么&#xff0c;该下线哪些功能呢&…...

算法学习之:Raft-分布式一致性/共识算法

基础介绍 Raft是什么&#xff1f; Raft is a consensus algorithm that is designed to be easy to understand. Its equivalent to Paxos in fault-tolerance and performance. The difference is that its decomposed into relatively independent subproblems, and it clea…...

彩色进度条(C语言版本)

.h文件 #include<stdio.h> #include<windows.h>#define NUM 101 #define LOAD_UP 50 #define LOAD_DOWN 60 #define SLEEP_SLOW 300 #define SLEEP_FAST 70 版本1&#xff1a;&#xff08;初始版&#xff09; //v1 #include "progress.h" int main() …...

C#和C++有什么区别?

C#和C都是广泛使用的编程语言&#xff0c;但它们在设计理念、应用场景和语法上有许多显著的区别。以下是一些关键区别的详细介绍&#xff1a; 1. 设计理念和目的 C&#xff1a; 设计目的&#xff1a;C是一种面向系统编程和应用程序开发的语言&#xff0c;具有高效性和灵活性…...

微信小程序报错:notifyBLECharacteristicValueChange:fail:nodescriptor的解决办法

文章目录 一、发现问题二、分析问题二、解决问题 一、发现问题 微信小程序报错&#xff1a;notifyBLECharacteristicValueChange:fail:nodescriptor 二、分析问题 这个提示有点问题&#xff0c;应该是该Characteristic的Descriptor有问题&#xff0c;而不能说nodescriptor。 …...

富格林:可信攻略阻止遭遇欺诈

富格林悉知&#xff0c;在投资市场中&#xff0c;如何阻止遭遇欺诈情况应该是每位投资者都想要了解的一个知识点。事实上&#xff0c;现货黄金市场相对来说会其他市场复杂多变&#xff0c;因此要想盈利出金还是得要先学会阻止遭遇欺诈情况。据富格林所知&#xff0c;目前市面上…...

搭建淘宝扭蛋机小程序:技术选型与最佳实践

随着移动互联网的快速发展&#xff0c;小程序作为一种轻量级应用&#xff0c;以其无需安装、即用即走的特点&#xff0c;受到了广大用户的喜爱。在电商领域&#xff0c;淘宝作为国内最大的电商平台之一&#xff0c;也积极拥抱小程序技术&#xff0c;为用户提供更加便捷、个性化…...

【线性回归】梯度下降

文章目录 [toc]数据数据集实际值估计值 梯度下降算法估计误差代价函数学习率参数更新 Python实现导包数据预处理迭代过程结果可视化完整代码 结果可视化线性拟合结果代价变化 数据 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , y^{(i)}\right) , i 1 ,…...

GMSL图像采集卡,适用于无人车、自动驾驶、自主机器、数据采集等场景,支持定制

基于各种 系列二代 G MS L 图像采集卡&#xff08;以下简称 二代图像采集卡&#xff09;是一款自主研发的一款基于 F P G A 的高速图像产品&#xff0c;二代图像采集卡相比一代卡&#xff0c;由于采用PCIe G en 3 技术&#xff0c;速度和带宽都相应的有了成 倍的提高。该图像…...

docker不删除容器更改其挂载目录

场景&#xff1a;docker搭建的jenkins通常需要配置很多开发环境&#xff0c;当要更换挂载目录&#xff0c;每次都需要删除容器重新运行&#xff0c;不在挂载目录的环境通常不会保留。 先给一个参考博客docker不删除容器&#xff0c;修改容器挂载或其他_jenkins 修改容器挂载do…...

K8s Service 背后是怎么工作的?

kube-proxy 是 Kubernetes 集群中负责服务发现和负载均衡的组件之一。它是一个网络代理&#xff0c;运行在每个节点上, 用于 service 资源的负载均衡。它有两种模式&#xff1a;iptables 和 ipvs。 iptables iptables 是 Linux 系统中的一个用户空间实用程序&#xff0c;用于…...

ClickHouse配置与使用

静态IP配置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.18.128 NETMASK255.255.255.0 GATEWAY192.168.18.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…...

将某一个 DIV 块全屏展示

文章目录 需求分析 需求 上节我们研究了如何将页面中的指定 div 下载为图片&#xff1a;跳转查看 本节演技一下如何将 DIV 全屏展示 全屏展示某一个 DIV 分析 其实就是模拟键盘动作 F11 var element document.getElementById(pic) var requestMethod element.requestFullS…...

K8S集群再搭建

前述&#xff1a;总体是非常简单的&#xff0c;就是过程繁琐&#xff0c;不过都是些重复的操作 master成员: [controller-manager, scheduler, api-server, etcd, proxy,kubelet] node成员: [kubelet, proxy] master要修改的配置文件有 1. vi /etc/etcd/etcd.conf # 数…...

工具-博客搭建

以下相关讲解均基于hexo github pages方案&#xff0c;请注意&#xff01;&#xff01;&#xff01;博客搭建方案选择 参考文章1 搭建教程 参考文章1 hexo github pages搭建过程中遇到的问题 删除categories、tags 1、删除含有需要删除categories、tags的文章 2、hexo …...

贪心算法:合并区间

参考资料&#xff1a;代码随想录 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 做过用最少数量的箭引爆气球和无重叠区间这两道题目后&#xff0c;题意和题解都不难理解。唯一的一点儿难点是对于api的运用。 class Solution {public int[][] merge(int[][…...