薛钦亮的python教程(三)python的分支与循环居然这么简单

接上文一文读懂python基本数据类型和运算

〇、Python的代码块和缩进规则

先讲这一部分是因为后面的分支和循环必须进行恰当的缩进。
代码块是作为一个单元执行的代码文本,对程序的结构和执行有重要影响,退出代码区块范围就退出了作用域范围。
在C/C++中,用大括号来标识代码块,Python中,用缩进来标识代码块。
在任何编辑器中,Python可以按tab键来进行缩进,一般为4个空格,只有位于同一缩进水平的代码会作为同一代码块执行,Python不允许胡乱缩进,否则会有语法错误。

一、python的分支语句

分支即为遇到了岔路,复杂程序大概率不会一条路顺着执行,就需要根据不同的条件进入不同的分支。
Python的分支语句只有三个关键字,if、else、elif。

1. 单分支语句

if和条件之间要空格,条件之后要加冒号(:),下面表达式可以是一句,也可以是多句,但一定要注意正确缩进。

if <条件>:
	表达式

例如:

if grade < 60:
	GPA = 0

2. 两分支语句

else后面要加冒号(:),每个表达式都是一个代码块,注意正确缩进。

if <条件>:
	表达式
else:
	表达式
if num == 1:
	gender = 'male'
else:
	gender = 'female'

另一种格式的if-else语句(实质上相当于三目运算符),还是举个例子来说明:

PASS = True if grade >= 60 else False

总结一下是

值1 if 条件 else 值2

3. 多分支语句

else后面要加冒号(:),每个表达式都是一个代码块,注意正确缩进。

if <条件>:
	表达式
elif <条件>:
	表达式
elif <条件>:
	表达式
	……
else:
	表达式
if chnum == '一':
	num = 1
elif chnum == '二':
	num = 2
elif chnum == '三':
	num = 3
else:
	num = 0

二、Python的循环语句

1. while循环

while循环比较简单,语法为:

while <条件>:
	表达式

写个求前n个自然数之和的例子吧

sum = 0
i = 0
n = int(input())
while i < n:
	sum += i
	i += 1 #注意python没有++操作

2. for循环

for循环依赖于可迭代对象,在基本数据类型中,string、list、tuple、set、dict均为可迭代对象。
举个例子:

fruits = ['apple','banana','orange']
for f in fruits:
	print(f)
	
apple
banana
orange

string = "python"
for s in string:
	print(s,end=',')
	
p,y,t,h,o,n,

range对象

可迭代对象还有什么呢?这里暂且介绍一种常用的特殊可迭代对象:range。
range可以用于创建一个整数列表,可以有三个参数,分别为:start, stop, step,常常用在for循环中。
start:起始范围,默认为从0开始,例如range(3)包括0,1,2。
stop:终止范围,但不包括stop本身,例如range(0,5)包括从0到4的整数。
step:步长,默认为1,可以指定为非0整数(负数是允许的)。
从range可以用list转为列表,例如:

>>> r = range(0,10,2)
>>> list(r)
[0, 2, 4, 6, 8]
>>> list(range(10,0,-1))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

在for循环中,常常用range来代替列表的索引,通过索引来获取列表元素,这种方式看起来更像C语言。

fruits = ['apple','banana','orange']
for i in range(len(fruits)):
	print(fruits[i])
	
apple
banana
orange

enumerate函数

既然我们既可以直接对序列对象进行迭代,也可以获取其索引迭代,有没有可以同时获取到索引和其值的循环迭代法呢?当然是有的。
enumerate函数可以返回一个带有索引和值的可迭代对象,举个例子来说明其作用。

fruits = ['apple','banana','orange']
for i,value in enumerate(fruits):
	print(i,value)
	
0 apple
1 banana
2 orange

在for循环中修改对象

首先试一下可否通过第一种直接迭代的方式修改对象。
我们假设一个场景,要把一个数组的每一个元素都变成原来的平方。

array = list(range(0,5))
for a in array:
	print("old:",id(a))
	a *= a
	print("new:",id(a))
print(array)

old: 2069324960
new: 2069324960
old: 2069324976
new: 2069324976
old: 2069324992
new: 2069325024
old: 2069325008
new: 2069325104
old: 2069325024
new: 2069325216
[0, 1, 2, 3, 4]

最后发现这个array是没有改变的,究其原因,是循环迭代中的a,虽然代表了真实的数组中元素的地址,但一旦对其赋值,地址就会改变,所以新的值没有写入到数组中。
但如果是通过索引去赋值,猜测是改变值的同时,列表等复杂对象同时会改变记录的地址,从而将新的值放入到列表中,因此一定要通过索引的方式才可以改变列表等复杂序列对象的值。
所以正确的写法为:

array = list(range(0,5))
for i in range(len(array)):
	array[i] *= array[i]
print(array)

[0, 1, 4, 9, 16]

3.循环控制:break,continue,return

break的作用是跳出当前循环,一般用于符合一定条件时提前退出循环。
continue的作用是跳过当前这次循环,直接进入下一次循环。
return的作用是退出当前函数,在Python中如果在一个函数外使用这一关键字会报错。

4. 列表生成式

Python中存在一种比较简单的生成列表的方法,是结合了List类型和for循环的语法,叫做列表生成式。来看个例子。
我们要生成2的从1到10次幂组成的列表,一种方式为:

twopowlist = []
for i in range(1,11):
	twopowlist.append(2**i)

另一种方式为:

twopowlist = [ 2**i for i in range(1,11) ]

在实际运行中,第二种方式不但语法简洁,运行速度也明显快于第一种。
在这里插入图片描述

学会这一讲的知识后,各位应该可以写任意复杂逻辑的python语句了,下一讲函数和对象可以让我们的Python语句看起来更简单,敬请期待!!!

下一篇:薛钦亮的python教程(四)十分钟搞明白python的函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

薛钦亮

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值