文章目录
Python3-流程控制语句、迭代器、生成器
1. 介绍几个基本的脚本
# 斐波那契数列
# 前两个数字的和等于第三个数字
a,b = 0,1
while b<10:
print(b)
a,b = b,a+b # 先计算出右边表达式,再同时赋值给左边变量
a,b = 0,1
while b<10:
print(b,end=',') # 将输出放到同一行,并在输出的结尾加上字符串
a,b = b,a+b
2. if条件控制
# if语句格式:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
# 每个条件后面都要有冒号:
# 一个代码块中所有语句的缩进都要相同,同一缩进才是同一代码块。
# if语句嵌套格式:
if 表达式1:
语句
if 表达式2: # 嵌套的if语句
语句
elif 表达式3:
语句
else:
语句
elif 表达式4:
语句
else:
语句
age = int(input("请输入你家狗狗的年龄: ")) # 输入一个值,并转换为整数
print("")
if age <= 0:
print("你是在逗我吧!")
elif age == 1:
print("相当于 14 岁的人。")
elif age == 2:
print("相当于 22 岁的人。")
elif age > 2:
human = 22 + (age - 2) * 5
print("对应人类年龄: ", human)
### 退出提示
input("点击 enter 键退出")
if条件语句中常用运算符:
number = 7
guess = -1
print("数字猜谜游戏!")
while guess != number:
guess = int(input("请输入你猜的数字:"))
if guess == number:
print("恭喜,你猜对了!")
elif guess < number:
print("猜的数字小了...")
elif guess > number:
print("猜的数字大了...")
num=int(input("输入一个数字:"))
if num%2==0:
if num%3==0:
print ("你输入的数字可以整除 2 和 3")
else:
print ("你输入的数字可以整除 2,但不能整除 3")
else:
if num%3==0:
print ("你输入的数字可以整除 3,但不能整除 2")
else:
print ("你输入的数字不能整除 2 和 3")
3. while循环语句
# 单条件while循环语句
while 判断条件(condition):
执行循环体语句(statements)
# python中没有do...while语句
# 多条件while循环语句
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
n = 100
sum = 0
counter = 1
while counter <= n: # while循环,条件正确则执行循环体
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n, sum))
var = 1
while var == 1 : # 表达式永远为 true
num = int(input("输入一个数字 :"))
print ("你输入的数字是: ", num)
print ("Good bye!")
# 条件永远为True,重复执行循环体
count = 0
while count < 5: # 小于5则执行循环体
print (count, " 小于 5")
count = count + 1
else: # 大于等于5执行其他语句
print (count, " 大于或等于 5")
# 循环体只有一条语句,可与while写在同一行
flag = 1
while flag == 1: print("努力,奋斗!")
4. for循环语句
for <variable> in <sequence>:
<statements>
else:
<statements>
a = [1, 2, 3, 4, 5]
b = 0
for i in a:
print(i)
b = b + i
if i == 5:
print('累加结束,请给出计算结果!')
break # break终止for循环,跳出整个循环。
else:
print('a列表是一个空列表')
print('a列表的各数值的和为:', b)
# continue 跳出本次for循环,继续下次for循环
range()函数和len()函数实现for循环:
range()
:生成一个数列,可以使用list()或tuple()转换为列表或元组。格式:range(最小值,最大值,步长)
,最小值缺省默认0,步长缺省默认1,最大值不可缺省。数列中包含最小值,不包含最大值。
len()
:用于计算对象的长度
list1 = ['a', 'b', 'c', 'd']
print('列表list1的元素个数为:', len(list1))
for i in range(len(list1)):
print(i,list1[i])
5. break和continue语句
break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false (以while循环)导致循环终止时被执行,但循环被 break 终止时不执行。
在没有break语句时,for循环或while循环中的else子句肯定会执行。
for letter in 'abong': # 实例1
if letter == 'b':
break
print ('当前字母为 :', letter)
var = 10
while var > 0: # 实例2
print ('当期变量值为 :', var)
var = var -1
if var == 5:
break
print ("Good bye!")
for letter in 'abong': # 实例1
if letter == 'b':
continue
print('当前字母为 :', letter)
var = 10
while var > 0: # 实例2
var = var - 1
if var == 5:
continue
print('当期变量值为 :', var)
print("Good bye!")
6. pass语句
Python中pass是空语句,是为了保持程序结构的完整性。pass 不做任何事情,一般用做占位语句。
for letter in 'abong':
if letter == 'o':
pass # 啥都不做
print('执行 pass 块')
print('当前字母 :', letter)
print("Good bye!")
7. 迭代器
7.1 用标准数据类型创建迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。【前者创建迭代器,后者记住下一个元素】
字符串,列表或元组对象都可用于创建迭代器。
介绍几个迭代器的用法:
list = ['a', 'b', 'c', 'd']
it = iter(list) # 创建迭代器对象,这是next(it)指向第一个元素
i = 0
while i < len(list):
print('第', i+1, '个元素是:', next(it))
i += 1
list = ['a', 'b', 'c', 'd']
it = iter(list) # 创建迭代器对象,这是next(it)指向第一个元素
i = 0
for a in it:
print('第', i+1, '个元素是:', a)
i += 1
import sys # 导入模块
list=[1,2,3,4]
it=iter(list) # 使用列表创建迭代器对象
while True:
try:
print(next(it), end=' ')
except StopIteration: # 异常处理,用于标识迭代的完成,防止出现无限循环的情况
sys.exit() # 退出循环
7.2 自定义迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法__iter__()
与__next__()
。
__iter__()
:返回一个特殊的迭代器对象, 这个迭代器对象实现了__next__()
方法并通过 StopIteration
异常标识迭代的完成。
__next__()
:返回下一个迭代器对象。
class MyNumbers: # 定义一个新的数据类型MyNumbers,数字、字符串、列表、元组、集合、字典是标准的数据类型,即已经定义好的数据类型。
def __iter__(self): # 成员函数,self是指一个实例
self.a = 1 # 成员变量a,赋值为1
return self # 返回值
def __next__(self): # 成员函数
if self.a <= 20: # 成员变量
x = self.a # 把变量a赋值给x
self.a += 1 # 变量a加1
return x # 返回原来的变量a
else: # 当a的值大于20,就会引发异常,停止迭代。
raise StopIteration
myclass = MyNumbers() # 创建一个MyNumbers类型的实例,类比列表、元组
myiter = iter(myclass) # 使用实例创建一个迭代器,这个和使用列表创建的迭代器使用方法一致.
for i in myiter: # 此时的myiter就是一个迭代器,可以看作是带有坐标的列表。
print(i, end=' ')
8. 生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)
。
生成器是一个返回迭代器的函数,只能用于迭代操作。
在调用生成器运行的过程中,每次遇到 yield
时函数会暂停并保存当前所有的运行信息,返回 yield
的值, 并在下一次执行 next()
方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
import sys
def fibonacci(n): # 生成器函数,斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n): # 大于n就直接返回
return
yield a # 否则保存a的值,即while循环体执行一次,就会返回一次a的值。
a, b = b, a + b
counter += 1
f = fibonacci(10) # f是一个迭代器,由生成器生成并返回
while True:
try:
print(next(f), end=" ")
except StopIteration:
sys.exit()