一、if、while、for、range
if
Python中if语句的一般形式如下所示:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。
注意:
-
1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
-
2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
-
3、在Python中没有switch – case语句。
-
例题1
age = int(input("请输入狗狗的的年龄:"))
if age <= 0:
print("你tnd在逗我")
elif age == 1:
print("相当于14岁的人")
elif age == 2:
print("相当于22岁的人")
else:
human = 22 + (age-2)*5
print("相当于%s岁的人"%human,end="")
# print(f"相当于{human}岁的人")
- 例题2
print("==== 猜数字游戏开始 ====")
number = 24
while 1:
guess = int(input("请输入你猜测的数字:"))
if guess==number:
print("恭喜你猜对了!")
break
elif guess<number:
print("再往大点猜!")
else:
print("再往小点猜!")
- 例题3
num = int(input("请输入一个正整数:"))
while num<=0:
num = int(input("请重新输入:"))
if num%2==0:
if num%3==0:
print(f"{num}既是2的倍数,也是3的倍数")
else:
print(f"{num}只是2的倍数,不是3的倍数")
else:
if num%3==0:
print(f"{num}只是3的倍数,不是2的倍数")
else:
print(f"{num}既不是2的倍数,也不是3的倍数")
while
注意:
-
在 Python 中没有 do…while 循环。
-
while 1 可以进入无限循环,你可以使用 CTRL+C 来退出无限循环。
-
存在 while … else 语句,在条件语句为 false 时执行 else 的语句块。
-
while 和 for 中都可以用 continue 和 break
- 例题1
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
"""
0 小于 5
1 小于 5
2 小于 5
3 小于 5
4 小于 5
5 大于或等于 5
"""
- 例题2
sum = 0
start,end = 1,100
count = start
while count <= end:
sum += count
count += 1
print("%d 到 %d 的和为:%d"%(start,end,sum))
- 例题3
## Fibonacci数列
a,b = 0,1
while b<10:
print(b)
a,b = b,a+b
# 输出结果是:1行1个
# 如果我们想让结果在同一行显示,中间用,或者空格隔开呢?==》 end关键字
aa,bb = 0,1
while bb<10:
print(bb,end=',')
aa,bb = bb,aa+bb
print("")
# 输出结果是1,1,2,3,5,8,
# 但不太美观,我们想去掉最后一个,可以多加一个判断
aaa,bbb = 0,1
while bbb<10:
if aaa+bbb<10:
print(bbb,end=',')
else:
print(bbb)
aaa,bbb = bbb,aaa+bbb
# 结果1,1,2,3,5,8
for
- 例题1
languagues = ['C++','Java','Python','Go','Ruby']
for lan in languagues:
# print(lan)
if lan==languagues[-1]:
print(lan)
else:
print(lan,end=',')
- 例题2
sites = ["Baidu", "Google","Runoob","Taobao"]
#sites.clear()
for site in sites:
if site == "Runoob":
print("菜鸟教程!")
break
print("循环数据 " + site)
else:
print("没有循环数据!") # 如果sites里没有数据,就会直接转到else
print("完成循环!")
range
for x in range(5): # 从0开始,左闭右开
print(x,end='') # 结果:01234
for x in range(3,8): # 限定start和end
print(x,end='') # 结果:34567
for x in range(10,20,2): # 再补上步长
print(x,end=',') # 结果:10,12,14,16,18,
for x in range(-1,-10,-2):
print(x,end=' ') # 结果:-1 -3 -5 -7 -9
# list 配合上 len 配合上 for in
list = ['Google','MicroSoft','Apple','Alibaba']
for i in range(len(list)):
print(i,list[i])
"""
0 Google
1 MicroSoft
2 Apple
3 Alibaba
"""
二、迭代器与生成器
迭代器
-
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
-
迭代器是一个可以记住遍历的位置的对象。
-
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
-
迭代器有两个基本的方法:iter() 和 next()。
-
字符串,列表或元组对象都可用于创建迭代器:
list = [1,2,3,4,5]
it = iter(list)
print(type(it))
print(next(it))
print(next(it))
"""
<class 'list_iterator'>
1
2
"""
- 遍历方法1:迭代器对象可以使用常规 for 语句进行遍历:
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ") # 1 2 3 4
- 遍历方法2:可用sys模块中的 try…except 语句进行遍历:
import sys # 引入 sys 模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIterat:
sys.exit()
-
自己创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。
如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为 init(), 它会在对象初始化的时候执行。更多内容查阅:Python3 面向对象
iter() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 next() 方法并通过 StopIteration 异常标识迭代的完成。
next() 方法(Python 2 里是 next())会返回下一个迭代器对象。
创建一个返回数字的迭代器,初始值为 1,逐步递增 1:
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
"""
1
2
3
4
5
"""
-
StopIteration
StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。
在 20 次迭代后停止执行:
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x,end=' ')
"""
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
"""
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
以下实例使用 yield 实现斐波那契数列:
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
"""
0 1 1 2 3 5 8 13 21 34 55
"""
-
当 fibonacci 函数里出现了 yield 的时候,这个函数就变成了一个生成器,调用函数返回的就是一个 迭代器。
-
所以这里的 f 就相当于 前面例子中的 it
-
迭代器是用来遍历一组数据的,这组数据,就是 yield 后面的变量(即 a ) 在函数中经历的每一个值