Python学习笔记(四)控制结构

“Life is short, You need Python” – Bruce Eckel

Environment

  • OS: macOS Mojave
  • Python version: 3.7
  • IDE: Jupyter Notebook

目录

  • 0. 写在前面
  • 1. 控制枢纽
    • 1.1 条件判断
    • 1.2 逻辑运算
    • 1.3 成员资格运算
  • 2. if 分支结构
    • 条件表达式
  • 3. for 迭代
    • 3.1 迭代控制
    • 3.2 搭配 else
  • 4. while 循环
    • 4.1 循环控制
    • 4.2 搭配 else
  • 5. 异常处理

0. 写在前面

Python 采用缩进(缩进量为 4 个字符)和冒号表示语句之间的逻辑,代码简洁。其允许行的最大长度为 79。这里做一点儿个人的Python学习笔记,本文内容包括 Python 的基本结构控制语句,包括 if 条件分支、for 迭代、while 循环、breakcontinueelse 的使用和异常处理语句。

1. 控制枢纽

1.1 条件判断

条件判断用于分支结构和循环结构中的条件测试

  • 比较,成立为 True,否则为 False
a, b = 1, 2
print(a > b, a == b, a < b, a!= b) # False False True True
  • 组合数据长度,大于零(至少包含一个元素)则为 True,否则为 False
empty_list = []
if empty_list:
	print("This way")
else:
	print("That way")

# 打印 That way

Tip: 遇到复杂的条件判断时,考虑定义并调用函数进行

# 判断是否时闰年

def leap_year(year):
    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0

if leap_year(2020):
    print('Yes')
else:
    print('No')

1.2 逻辑运算

优先级:非 > 与 > 或

flag, another_flag = True, False
print(flag and another_flag) # False
flag, another_flag = True, False
print(flag or another_flag) # True
flag, another_flag = True, False
print(not flag, not another_flag) # Flase True

1.3 成员资格运算

成员资格运算符 in

members = ['one', 'two', 'four']
print('three' in members) # False
print('two' in members) # True

2. if 分支结构

注意,Python 不允许在条件判断中进行赋值操作。

  • 单分支,使用 if 实现
if 条件:
    条件为 True 时执行的操作

x = 1
if x:
    print('Yes')

# Yes
  • 二分支,使用 if-else 实现
if 条件:
    条件为 True 时执行的操作
else:
    上述条件为 False 时执行的操作

x = 0
if x:
    print('Yes')
else:
    print('No')

# No
  • 多分支,使用 if-elif-elif-...-else 实现
if 条件:
    条件为 True 时执行的操作
elif 条件:
    条件为 True 时执行的操作
elif 条件:
	条件为 True 时执行的操作
elif ...:
	...
else:
    上述各条件均为 False 时执行的操作

# 判断一个年份是否为闰年
year = 2020
if (year % 4 == 0) and (year % 100 != 0):
    print('Yes')
elif (year % 400 == 0):
    print('Yes')
else:
    print('No')

# 输出 'Yes'

Tip:避免过多分支嵌套

条件表达式

条件表达式是 Python 中唯一的三目运算符,使 if 分支结构更即爱简洁,其语法为

expression1 if condition else expression2

leaky_relu 函数

def leaky_relu(x, a=0.01):
    """
    计算 LeakyReLU
    
    Params:
    x, float
        input
    a, float, default 0.01
        slope for the negative axis
    """
    return x if x >= 0 else a * x

3. for 迭代

语法为

for 元素 in 可迭代对象:
	执行的操作

对元组进行迭代

# 对 0 到 4 的整数求和
out = 0
for i in (0, 1, 2, 3, 4):
	out += 1

print(out) # 10

对字典进行迭代

dictionary = {1: 'one', 2: 'two', 3: 'three'}
# 直接迭代得到键
for elem in dictionary:
    print(elem)
    
print()
# 与上面等价
for elem in dictionary.keys():
    print(elem)

# 对值迭代
print()
for elem in dictionary.values():
    print(elem)

# 对 键-值 迭代
print()
for elem in dictionary.items():
    print(elem)

对数字序列迭代

# 对 0 到 4 的整数之和
res = 0
for i in range(5):
	res += i
print(res) # 10

列表的 remove 方法一次只能够删除一个元素,那么如何删除重复的元素呢?

如,删除一个列表 [1, 1, 1, 1, 0, 0, 1] 中所有的 1

# 法一:使用 while 循环,可以实现,但不够简洁
while True:
    if 1 in ls:
        ls.remove(1)
    else:
        break
        
print(ls)
# [0, 0]
# 法二:尝试 for 迭代,无法完成
# 搞清楚迭代的每一步就明白了为什么
for elem in ls:
    if elem == 1:
        ls.remove(1)
        
print(ls)
# [1, 0, 0, 1]
# 法三:for 迭代结合反向索引,可以实现
for i in range(-len(ls), 0):
    if ls[i] == 1:
        ls.remove(1)
        
print(ls)
# [0, 0]

3.1 迭代控制

  • break 语句,结束迭代
res = 0
for i in range(1, 10):
    if i % 5 == 0:
        break
    res += i
    
print(res) # 10
  • continue 语句,结束本轮迭代,进入下轮迭代
res = 0
for i in range(1, 10):
    if i % 5 == 0:
        continue
    res += i
    
print(res) # 40

3.2 搭配 else

for-else ,顺利完成了迭代,即没有被 break 语句中止迭代,那么执行 else 语句中的内容

res = 0
for i in range(5):
    res += i
else:
    print('iterationn done!') 

# iterationn done!

4. while 循环

使用 while 实现

while 条件:
    条件为 True 时执行的操作

# 猜数字,正确答案为 666
answer = 666
flag = True
while flag:
    number = int(input("Input a number:"))
    if number == answer:
        print('Damn right')
        flag = False
    else:
        print('Wrong guess')

4.1 循环控制

for 迭代相同

  • break 语句,结束循环
answer = 666
while True:
    number = int(input("Input a number:"))
    if number == answer:
        print('Damn right')
        break
    else:
        print('Wrong guess')
  • continue 语句,结束本轮循环,进入下轮循环
# 计算 1 到 5 之间奇数之和
i = 0
res = 0
while i <= 5:
    i += 1
    if i % 2 == 0:
        continue
    res += i

print(res) # 9

4.2 搭配 else

while-else ,若因不满足循环条件退出循环,即非 break 退出,则执行 else 中的内容

def showMaxFactor(num):
    count = num // 2
    while count > 1:
        if num % count == 0:
            print('The max factor of %d is %d.' % (num, count))
            break
        count -= 1
    else:
        print('%d is a prime.' % num)

showMaxFactor(19) # 输出 '19 is a prime.'

Tip:小心死循环

```python
# 计算 1 到 5 之间奇数之和
i = 0
res = 0
while i <= 5:
    # i += 1 # 这句干掉,就变成死循环了
    if i % 2 == 0:
        continue
    res += i

print(res) # 9

5. 异常处理

try-exception[-else][-finally] 见Python异常处理。

你可能感兴趣的:(Python学习笔记)