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
⚠️ **GitHub.com Fallback** ⚠️