一、流程控制
控制事物的执行流程
1. 顺序结构
# 自上而下依次执行,我们前面写的代码都是顺序执行的
2. 分支结构
# 根据不同的条件执行不同的分支
3. 循环结构
# 言外之意就是重复执行
二、分支结构
1、单分支
if
条件:
条件成立之后要执行的代码块
2、双分支
if
条件:
条件成立之后执行的代码块
else
:
条件不成立执行的代码块
3、多分支
if
条件
1
:
条件
1
成立之后执行的代码块
elif
条件
2
:
条件
1
不成立,条件
2
成立执行的代码块
elif
条件
3
:
条件
1
、条件
2
不成立,条件
3
成立之后执行的代码块
...
else
:
以上所有条件都不成立的话,执行的代码块
4、if 嵌套
age
=
18
height
=
160
weight
=
100
is_beautiful
=
True
is_success
=
False
if
age <
26
and
height >
=
160
and
weight <
=
100
and
is_beautiful:
print
(
'小姐姐,能否给个微信?'
)
if
is_success:
print
(
'吃饭,看电影...'
)
if
True
:
if
False
:
...
else
:
print
(
'滚蛋吧,下一个更好'
)
else
:
print
(
'认错人了'
)
三、循环结构
1、while 循环
while
条件:
条件成立之后执行的循环体
2、while + break (跳出本层循环)
count
=
0
while
count <
3
:
# 1. 先让用户输入用户名和密码
username
=
input
(
'username>>>:'
)
password
=
input
(
'password>>>:'
)
# password: str---->123
password
=
int
(password)
# 只能转数字类型的
# 2. 比较用户名和密码
# 在python中,==比较值大小和类型
# if username == 'kevin' and password == '123':
if
username
=
=
'kevin'
and
password
=
=
123
:
print
(
'登录成功'
)
break
# 调出while循环,它是跳出本层循环
else
:
print
(
'登录失败'
)
3、while + continue
#循环打印出0-9之间的数字,但是不打印6
count
=
0
while
count <
10
:
if
count
=
=
6
:
count
+
=
1
continue
# 是调出本次循环
print
(count)
count
+
=
1
4、while + else
count
=
0
while
count <
10
:
if
count
=
=
3
:
break
print
(count)
count
+
=
1
else
:
print
(
'嘿嘿嘿'
)
# 当while循环内没有被人为中断(break)的时候,会执行else语句
5、标志位
在复杂的程序中,很多不同的事件都会导致程序停止运行;在这种情况下,该怎么办呢?例如,在游戏中,多种事件都可能导致游戏结束,如玩家一艘飞船都没有了或要保护的城市都被摧毁了。导致程序结束的事件有很多时,如果在一条 while 语句中检查所有这些条件,将既复杂又困难。在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志 ,充当了程序的交通信号灯。你可让程序在标志为 True 时继续运行,并在任何事件导致标志的值为 False 时让程序停止运行。这样,在 while 语句中就只需检查一个条件 —— 标志的当前值是否为 True ,并将所有测试(是否发生了应将标志设置为 False 的事件)都放在其他地方,从而让程序变得更为整洁。
下面来在前一节的程序 parrot.py 中添加一个标志。我们把这个标志命名为 active (可给它指定任何名称),它将用于判断程序是否应继续运行:
active
=
True
while
active:
mes
=
input
(
'请输入 q 退出程序:'
)
if
mes
=
=
'q'
:
active
=
False
else
:
print
(mes)
标志位的使用
flag
=
True
while
flag:
# 1. 先让用户输入用户名和密码
username
=
input
(
'username>>>:'
)
password
=
input
(
'password>>>:'
)
# password: str---->123
password
=
int
(password)
# 只能转数字类型的
# 2. 比较用户名和密码
# 在python中,==比较值大小和类型
# if username == 'kevin' and password == '123':
if
username
=
=
'kevin'
and
password
=
=
123
:
print
(
'登录成功'
)
while
flag:
cmd
=
input
(
'请输入你的指令:'
)
print
(
'正在执行你的指令: %s'
%
cmd)
'''如果输入的是q,就退出整个程序'''
if
cmd
=
=
'q'
:
flag
=
False
else
:
print
(
'登录失败'
)
2、for 循环
for
循环能做的事情,
while
循环都能够做
for
循环代码更加简介,另外,它不会出现死循环
# 请听题:
name_list
=
[
'kevin'
,
'tank'
,
'jason'
,
'tony'
]
# 循环取出列表中每一个人名
for
name
in
name_list:
print
(name)
"""
语法格式:
for 变量名 in 可迭代对象: # 可迭代对象:可循环的对象,字符串、列表、字典、元组等
print()
当你的变量名没有合适的名字可叫的时候,你可以采用i,j,k,v,item等代替
"""
# 字典报出来的是字段的K
# 循环打印字段的k和v
d
=
{
"username"
:
'kevin'
,
"age"
:
18
}
for
i
in
d:
print
(i, d[i])
补充for循环原理
获取可迭代对象:首先,
for
循环会获取要遍历的可迭代对象。可迭代对象是指实现了__iter__方法的对象,或者是序列类型(如列表、元组、字符串)。
获取迭代器:通过调用可迭代对象的__iter__方法,
for
循环会获取一个迭代器(iterator)。迭代器是实现了__next__方法的对象,它负责迭代遍历可迭代对象的每个元素。
迭代遍历:
for
循环会重复调用迭代器的__next__方法,每次获取可迭代对象的下一个元素。这个过程会持续直到迭代器抛出StopIteration异常,表示没有更多的元素可迭代。
执行循环体:在每次迭代中,
for
循环会将迭代器返回的元素赋值给循环变量(如
for
item
in
iterable中的item),然后执行循环体中的代码块。循环体中的代码会针对每个元素进行重复执行。
循环控制:在每次循环迭代之后,
for
循环会自动处理循环控制,即判断是否继续迭代。如果迭代器已经抛出StopIteration异常,或者循环体内部使用了
break
语句,循环会终止,否则会继续迭代。
总结起来,
for
循环通过获取可迭代对象和迭代器,并重复调用迭代器的__next__方法来遍历可迭代对象的元素。循环体内的代码会针对每个元素进行执行,直到迭代完成或循环被终止。这种迭代遍历的机制使得
for
循环在处理可迭代对象时非常方便和简洁。
3、
for
i
in
range
(
1
,
10
,
2
):
# 如果有三个参数,意思是:从1到10的整数,步长为2
print
(i)
range在不同版本解释器中的区别
在python2中直接打印出结果
在python3中做了优化,把它变成了迭代器, 就是节省内存资源
>>>
range
(
1
,
10
)
range
(
1
,
10
)
4、
for
i
in
range
(
10
):
if
i
=
=
3
:
break
print
(i)
5、
for
i
in
range
(
10
):
if
i
=
=
3
:
continue
print
(i)
此处注意与while中的continue的区别
# 验证账号密码是否存在
with
open
(
'/Users/sanpangdan/Desktop/python_fullstack/zm.txt'
,
'r'
, encoding
=
'utf-8'
) as f:
for
name
in
f:
if
username
=
=
name.split(
'|'
)[
0
]:
print
(
'用户名已存在,请换一个名字注册'
)
break
else
:
res
=
'%s|%s\n'
%
(username, passwd)
# 将账号密码做一个格式化赋值
with
open
(
'/Users/sanpangdan/Desktop/python_fullstack/zm.txt'
,
'a'
, encoding
=
'utf-8'
) as f1:
f1.write(res)
# 将账号密码存入文本文件
print
(
'{}注册成功!'
.
format
(username))
四、练习
1、while 循环嵌套的应用
2、for循环嵌套打印九九乘法表
关键:分行与列考虑,共9行9列,i控制行,j控制列。