Python基础语法‐‐‐‐流程控制 - baibing0716/python GitHub Wiki
一、条件控制
1. if条件语句基本格式
--------------------------------------------------------------------
if condition_1: # 条件结束的 :
statement_block_1
elif condition_2: # 条件结束的 :
statement_block_2
else: # else结束的 :
statement_block_3
--------------------------------------------------------------------
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 键退出")
1.2 if嵌套
--------------------------------------------------------------------------------
if 表达式1: # 注意嵌套过程中 空格的严格对齐
语句
if 表达式2:
语句
elif 表达式3:
语句
else:
语句
elif 表达式4:
语句
else:
语句
--------------------------------------------------------------------------------
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")
1.3 match...case语句
-------------------------------------------------------------
match subject:
case <pattern_1>: # case也可以设置多个匹配条件 case 401|403|404:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _: # 类似C语言的default
<action_wildcard>
-------------------------------------------------------------
def http_error(status):
match status:
case 400:
return "Bad request"
case 404:
return "Not found"
case 418:
return "I'm a teapot"
case _:
return "Something's wrong with the internet"
mystatus=400
print(http_error(400))
二、循环语句
2.1 while循环(Python不支持do while循环)
---------------------------------------
while 判断条件(condition):
执行语句(statements)……
---------------------------------------
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
---------------------------------------
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1 # Python不支持++
print("1 到 %d 之和为: %d" % (n,sum))
---------------------------------------
count = 0
while count < 5:
print (count, " 小于 5")
count = count + 1
else:
print (count, " 大于或等于 5")
---------------------------------------
2.2 for循环
---------------------------------------
for <variable> in <sequence>:
<statements>
else:
<statements>
word = 'runoob'
for letter in word:
print(letter)
---------------------------------------
for item in iterable:
# 循环主体
else:
# 循环结束后执行的代码
for x in range(6):
print(x)
else:
print("Finally finished!")
---------------------------------------
(1)如果你需要遍历数字序列,可以使用内置 range() 函数。它会生成数列
for i in range(5) :
print(i) # 输出 01234
(2) range() 指定区间的值
for i in range(5, 9) :
print(i) # 输出 5678
(3) range(起始,结束,步长)
for i in range(0, 10, 3) :
print(i) # 输出 0 3 6 9
(4) range(len(a)) 函数结合以遍历一个序列的索引
a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
for i in range(len(a))
print(i, a[i]) # 0 Google 1 Baidu 2 Runoob 3 Taobao 4 QQ
(5) 使用 range() 函数来创建一个列表:
list(range(5)) # 输出 01234
2.3 pass语句
pass是空语句,是为了保持程序结构的完整性; // TODO pass 不做任何事情,一般用做占位语句
for letter in 'Runoob':
if letter == 'o':
pass
print ('执行 pass 块')
print ('当前字母 :', letter)
print ("Good bye!")
三、推导式和Python自带的迭代器和生成器
3.1 推导式
推导式的作用:从一个数据序列build另一个新的数据序列
Python推导式支持的数据类型: List、Dictionary、Set、Tuple
--------------------------------List推导式--------------------------------------
[表达式 for 变量 in 列表]
[表达式 for 变量 in 列表 if 条件]
names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
new_list = [i.upper() for i in names if len(i) > 3] # 过滤掉长度 <= 3 的字符串列表,并将剩下的转换成大写字母
print(new_list) # ['ALICE', 'JERRY', 'WENDY', 'SMITH']
--------------------------------List推导式--------------------------------------
--------------------------------Dict推导式--------------------------------------
{key表达式 : val表达式 for 变量 in 集合}
{key表达式 : val表达式 for 变量 in 集合 if 条件}
listdemo = ['Google','Runoob', 'Taobao']
new_dict = {key:len(key) for key in listdemo} # 以字符串作为key 以字符串len作为val构建新字典
print(new_dict) # {'Google': 6, 'Runoob': 6, 'Taobao': 6}
--------------------------------Dict推导式--------------------------------------
---------------------------------set推导式--------------------------------------
{表达式 for item in Sequence}
{表达式 for item in Sequence if 条件}
a = {x for x in 'abracadabra' if x not in 'abc'} # 判断不是 abc 的字母并输出
print(a) # {'d', 'a'}
---------------------------------set推导式--------------------------------------
---------------------------------tup推导式--------------------------------------
(表达式 for item in Sequence)
(表达式 for item in Sequence if 条件)
a = (x for x in range(1, 10)) # 生成一个包含数字 1~9 的元组, 此时a是一个生成器对象
b = tuple(a) # 将生成器器对象转化为一个元组
print(b) # (1, 2, 3, 4, 5, 6, 7, 8, 9)
---------------------------------tup推导式--------------------------------------
3.2 迭代器
迭代器作用: 是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象(只能向前,不能后退)
迭代器的方法: iter() 和 next()
支持迭代器的类型: String、List、Tuple对象(不可变的数据类型)
--------------------------------------------------------------------------------
list = [1, 2, 3, 4]
it = iter(list) # 创建迭代器对象 print(next(it)) 输出迭代器的下一个元素
for x in it
print(x, end="") # 1234
--------------------------------------------------------------------------------
class MyNumbers:
def __iter__(self): # Python 的构造函数为 __init__(), 它会在对象初始化的时候执行
self.a = 1 # __iter__() 方法返回一个特殊的迭代器对象
return self # 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成
def __next__(self): # __next__() 方法(Python 2 里是 next())会返回下一个迭代器对象
x = self.a
self.a += 1
return x
myclass = MyNumbers() # 构建对象
myiter = iter(myclass) # 创建对象迭代器
print(next(myiter)) # 1
print(next(myiter)) # 2
--------------------------------------------------------------------------------
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 # StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况
myclass = MyNumbers() # 在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代
myiter = iter(myclass)
for x in myiter:
print(x)
3.3 生成器函数------使用了yield的函数被称为生成器函数
生成器函数: 是一种特殊的函数,可以在迭代过程中逐步产生值,而不是一次性返回所有结果
生成器函数返回值: 返回迭代器的函数,只能用于迭代操作(生成器就是一个迭代器)
解释: 当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield 后面的表达式作为当前迭代的值返回
然后,每次调用生成器的 next() 方法或使用 for 循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到 yield 语句
这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果; 调用一个生成器函数,返回的是一个迭代器对象。
def countdown(n):
while n > 0:
yield n
n -= 1
# 创建生成器对象
generator = countdown(5)
# 通过迭代生成器获取值
print(next(generator)) # 输出: 5
print(next(generator)) # 输出: 4
print(next(generator)) # 输出: 3
# 使用 for 循环迭代生成器
for value in generator:
print(value) # 输出: 2 1