Python 基础合集5:条件与循环

一、前言

本节主要整理了if 条件语法、两种循环和4个常用的语句。

环境说明:Python 3.6、windows11 64位

二、if 条件

基本语法:

if ……:
    pass
elif ……:
    pass
else:
    pass

当条件判断只涉及一分为二的判断时,可以只使用 if…else…,不用elif ,只有当一个整体被划分为2种以上的类别,elif 才派上用场。elif 是elseif 的缩写,有一些语言涉及条件句时,会直接使用elseif 都是一样的意思。
可以看一个经典的分数判断案例:

# 案例1:判断一个分数是及格还是不及格,及格线60分
# 代码1
score = 61
if score >= 60:
    print('恭喜你及格了!')
else:
    print('这次没及格,再接再厉哦!')

# 案例2:判断一个分数是优秀(>=90),还是良好(>=60,且<90),还是较差(<60)
# 代码2
score = 61
if score >= 90:
    print('优秀')
elif score >= 60:
    print('良好')
else:
    print('较差')

else 其实还可以用 elif 进行代替,比如

# 上个代码块的代码1 改写
score = 61
if score >= 60:
    print('恭喜你及格了!')
elif score < 60:
    print('这次没及格,再接再厉哦!')

同一个 if…elif…else… 语句之间是有递进关系的,也就是说,先判断前面的条件,符合了就返回,不符合再判断写一个,所以在案例2的代码2中判断良好的时候,不需要再加一个条件 score < 90。除了上面展示的方法,还可以通过if 条件嵌套来实现,见下例子:

# 代码3
score = 61
if score >= 60:
    if score >= 90:
    	print('优秀')
    else:
        print('良好')
else:
    print('较差')

有时候可能还会出现一种并列的判断(如下),多个if条件并列,只要符合条件便会打印对应的结果,以下代码会打印出前两个if 条件的结果。
使用并列的if 添加判断同一个值的类别时,只要判断条件都是互斥的,如代码4中第二个if 语句改为if 90 > score >= 60:即可实现代码2的效果,不过不推荐,容易出岔子。

# 代码4
score = 91
if score >= 90:
    print('优秀')
if score >= 60:
    print('良好')
if score < 60:
    print('较差')

三、循环

3.1 四个关键字

3.1.1 break

break 可以理解为打断,跳出循环。一般比较多是放到if 条件句中,当满足某个条件的时候终止循环,返回结果。
基本语法:

# for 循环+break
for...in...:
    ...
    if ...:
        break
# while 循环+break
while...(条件):
    ...
    if ...:
        break

如果break 不放在if 条件句中,直接放在循环的一级子句,循环便只会执行一遍,一般没有什么意义,不如直接去掉循环,直接执行循环体的代码,如下

# break 放在for 循环一级子句中,执行一遍便终止循环
for i in range(6):
    print(i)
    break

# 直接执行循环体
i = 0
print(i)

3.1.2 continue

continue 可以理解为结束本次循环,开启下次循环。一般也和if 条件句一起使用,当满足某个条件的时候,不执行循环体后续代码,回到循环的开始,开启下一次循环。
基本语法:

# for 循环+break
for...in...:
    ...
    if ...:
        continue
# while 循环+break
while...(条件):
    ...
    if ...:
        continue

示例:打印0-8,除了3之外的8个数

for i in range(9):
    if i == 3:   # 等于6时,不打印,直接进入下一次循环
        continue
    print(i)

3.1.3 pass

为了保持代码结构的完整性,pass不做任何操作,只是充当了一个占位语句。当没想好结构中具体的代码时,可以先用pass占位,保证程序正常运行不报错。

3.1.4 else

放在条件句中,else 条件会在出现 if 和elif 判断条件之外的其他的所有情况的时候执行。
放到循环中,else 条件会在循环中没有执行break语句时执行,否则就不会执行,如果执行了break,则不执行else 。
示例:

# 不执行else 代码 
for i in range(0,9):   # 取0~8
    if i == 3:         # 等于3时跳出循环
        break
    print(i)
else:
    print('没有执行break')

# 执行else 代码
for i in range(0,9,2): # 取偶数
    if i == 3:
        break
    print(i)
else:
    print('没有执行break')

3.2 两种循环

3.2.1 for 循环

基本语法:

for i in xxx: # xxx可以是str、list、tuple、dict、set、迭代器等
    <循环执行代码>

常用语法:

for i in range(x): # x 是一个整数
    <循环执行代码>

语法介绍:

  • i 是变量名,可以修改为其他变量;
  • in后可接str、list、tuple、dict、set、迭代器等,但不允许接整数、浮点数;若是字典,则赋值给变量的是字典中的key,而不是value,即遍历的是key;若是字符串,会依次输出字符;
  • for…in…语句最后需要加冒号;
  • for…in…语句内部语句需要缩进,tab缩进或两空格、四空格、六空格都可以,只要不混用
  • 循环时,列表里的元素值依次赋值给变量i,i最终的值取决于最新一次的赋值

作用:用于遍历可迭代的对象,查看使用对象内容,或重复执行循环次数确定的工作,使用次数完成某些任务。

for i in 'Xin':
    print(i)
#显示结果依次为:X i n

for i in [1,3,5,7]:
   print(i)
#显示结果依次为:1 3 5 7

for i in (1,3,5,7):
   print(i)
#显示结果依次为:1 3 5 7

for i in {1,5,3,7}:  # 集合会先排序再输出
   print(i)
#显示结果依次为:1 3 5 7
 
d = {'小A':95,'小B':93,'小C':92}
for i in d:
    print(i)
#显示结果依次为:小A 小B 小C
 
d = {'小A':95,'小B':93,'小C':92}
for i in d:
    print(d[i])
#显示结果为:95 93 92

for i in range(1,8):  # 取1~7
   print(i)
#显示结果依次为:1 2 3 4 5 6 7

for i in range(1,8,2):  # 在1~7,每两位取1个元素
   print(i)
#显示结果依次为:1 3 5 7

以上代码提到的range()是一个常用的迭代器,迭代器和序列的不同之处就是,序列全部元素会给你展示出来,打印序列时可以看到所有的值,而迭代器不会给你展示所有元素,你需要时才给你返回相关的元素,每次返回一个。在取单个值和遍历的场景下,从表面上是看不出什么区别的。想要查看迭代器的所有元素,可以根据内部数据结构转化一下,像range(1,8,2)可以通过list(range(1,8,2))转化为列表查看所有元素,当然用tuple(range(1,8,2))转化为元组也可以。
image.png
range()参数的意义:

  • range(n)与range(0,n)一样,都是生成一个从0到n-1的整数序列
  • range(m,n),n>m,生成从m到n-1的序列。取头不取尾。
  • range(m,n,p),n>m,生成m到n-1中间隔为p的整数序列。例如range(3,30,5)的意思就是从3开始每间隔5取一个数,直到29,结果为[3,8,13,18,23,28]。(只有两个参数时,p默认为1。)

再聊聊关于使用for 循环次数的应用,比如说我要打印3遍“Hello World!”,其实有无数多中方式,以下代码介绍4种,希望能打开你的思维。

# 法1:将0、1、2赋值i 循环3次
for i in range(3):
    print('Hello World!')

# 法2:将2、3、4赋值i 循环3次
for i in range(2,5):
    print('Hello World!')

# 法3:将3、5、7赋值i 循环3次
for i in range(3,9,2):
    print('Hello World!')

# 法4:将'X'、'i'、'x'赋值i 循环3次
for i in 'Xin':
    print('Hello World!')

# in后面替换成任意具有3个元素且合法的元组、列表、集合、字典都可以(合法即没有错误)

PS:如果是初学者,可能会对 for i in range(1,8):\n\t print(i)的意义会感到疑惑,本身执行这个其实没有多大的意义,要有对应的场景应用才有意义。该语句的应用有两个方面的价值,一个是只用它的循环次数,一个是变量 i 有意义,需要用来辅助处理数据。给个简单的场景,如我要计算从前一天的21点到次日的13点,过了多少个小时(算整点的即可),可以通过循环次数来查看:(这是一个简单的示例,但不是一个好的示例,因为直接13+24-21=16就可以得出结果)

count = 0     # 从0开始
for i in range(21,24+13):
    count = count + 1    # 每循环一次加上1,计算循环的次数
print(count)  # 结果为16

3.2.2 while循环

基本语法:

while <条件><循环执行代码>

作用:

  • 与if条件判断类似,while后条件若满足,会进入语句内部循环体执行代码直至条件不再满足或内部打断。
  • 用于处理未知循环次数已知循环次数的问题。

注意:当while的条件中含有变量时,变量需要先定义。
while循环解决循环次数确定的问题时,通常在循环条件中涉及到变量。变量和条件都是可根据实际情况进行自定义的,如以下代码1和代码2,循环次数和打印结果是一样的,但是变量初始赋值和循环的条件有微小差异,同时在加1重新赋值的位置也有所改变,一开始接触的时候,可以将每一次循环过程写出来,方便理解。
当解决循环次数不确定的问题是,通常会使用关键字True,然后加上一个if 判断当达成某个条件之后进行break(即跳出循环)。

# 处理循环次数确定的问题:
# 代码1
a = 0
while a < 5:
      a = a + 1
      print(a)

# 代码2
a = 1
while a < 6:
      print(a)
      a = a + 1
#代码1和代码2的结果均为:
#1 
#2
#3
#4
#5
    
# 代码3
a = 0
while a < 5:
      a = a + 1
print(a)
# 显示结果为:(因为print()在循环外,只输出最后一次赋值给a的值)

# 处理循环次数不确定的问题,常用while True+if+break
while True:
    if xxx:
        break

3.2.3 两类循环的差异

for循环和whlie循环最大的区别在于【循环的“工作量”是否确定】,当循环次数确定的情况下,两种循环都可以;当循环次数不确定的时候,则不适用for 循环,只能用while 循环。
示例:打印从1到100的整数分别乘以5的计算结果,提示第一个打印的值是5,最后一个是500。

# for循环
for i in range(1,101): 
    print(i*5)

# while循环
## 方法1:设定初始变量的值为0
i = 0
while i<100 :
    i = i+1
    print (i*5)

## 方法2:设定初始变量的值为1
i = 1
while i<101 :
    print (i*5)
    i = i+1

## 方法3:当做工作量不确定,但是有一个条件打印出500后终止循环来出来
i = 1
while True:
    print(i*5)
    if i*5 == 500:
        break
    i = i + 1

如上,其实实现方法也有多种,这就是代码的灵活之处,同一个目的地,或有一百种实现方式,多思考,多实践。




<下节预告:函数基本用法>


- End -

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xin学数据

为你点亮一盏灯,愿你前进无阻。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值