Python流程控制语句


编程语言三种基本结构

1.顺序结构:从上向下依次执行所有代码。

2.分支结构:根据条件选择执行部分代码。

3.循环结构:重复执行某一段代码,当循环达到预设次数或条件时,退出循环结构。

#分支:
#判断语句
if  m < n:
    print('m<n')    
elif  m > n:
    print('m>n')
else:
    print('m==n')
# 三目运算 变量 =  值1 if 条件 else 值2
print('偶数' if int(input('请输入任意整数:')) % 2 == 0 else '奇数')

# try except  (异常处理)
# 异常处理
try:
    a = 3 / 0
except Exception as e:
    print(e)
else:
    # 程序没有错误时,执行
    print('程序没有出错!')
finally:
    # 不论是否出错都会执行
    print('都要执行finally!')

# while 循环
while True:
    money = input('请支付xxx元:')
    try:
        m = float(money)
    except Exception as e:
        print(e)
    else:
        print(m)
        break

# for:迭代循环 从容器中按顺序依次取数据,循环的次数等于容器中元素的个数
# 当明确循环次数时,推荐使用for循环

# while: 当仅知道结束条件时,使用while循环 

# break:退出循环
# continue:跳过本次循环,进行下一次循环

# 案例 
import os
import time

while 1:
    print(f'\r{time.strftime("%H:%M:%S")}', end='')
    if time.strftime("%H:%M:%S") == '12:30:50':
        os.system("mspaint")
        break
    time.sleep(1)

# for 迭代
s = 'hello'  # String == Array[char]
lis = [1, 2, 3, 'a', ['b', 'c', 'd']]

for i in lis:
    print(i, 'hello')

print(range(5))  # 生成范围内的整数,生成n个数 默认从0开始到n-1
# 类型转换  -> list
print(list(range(5)))

# for 循环 range(开始值,结束值,步长)  [0,n)
for i in range(10, 0, -1):
    print(i)

内置函数 range() 常用于遍历数字序列,该函数可以生成算术级数:

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

生成的序列不包含给定的终止数值;range(10) 生成 10 个值,这是一个长度为 10 的序列,其中的元素索引都是合法的。range 可以不从 0 开始,还可以按指定幅度递增(递增幅度称为 '步进',支持负数):

>>> list(range(5, 10))
[5, 6, 7, 8, 9]

>>> list(range(0, 10, 3))
[0, 3, 6, 9]

>>> list(range(-10, -100, -30))
[-10, -40, -70]

range()len() 组合在一起,可以按索引迭代序列:

>>> a = ['Mary', 'had', 'a', 'little', 'lamb']
>>> for i in range(len(a)):
...     print(i, a[i])
...
0 Mary
1 had
2 a
3 little
4 lamb

不过,大多数情况下,enumerate() 函数更便捷,详见 循环的技巧

如果只输出 range,会出现意想不到的结果:

>>> range(10)
range(0, 10)

range() 返回对象的操作和列表很像,但其实这两种对象不是一回事。迭代时,该对象基于所需序列返回连续项,并没有生成真正的列表,从而节省了空间。

这种对象称为可迭代对象 iterable,函数或程序结构可通过该对象获取连续项,直到所有元素全部迭代完毕。for 语句就是这样的架构,sum() 是一种把可迭代对象作为参数的函数:

>>> sum(range(4))  # 0 + 1 + 2 + 3
6

Python代码编写的要求

  • 优雅
  • 简洁
  • 明确
# 显示Python之禅
import this 
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

条件的真假

真:
1. 除了0以外的所有数字都是真的。 
2. 非空的字符串、列表、集合、元组、字典都是真的。
3. True 

假:
1. 0  0.0  
2. '' [] () {}  
3. False 
4. None  

注意:空字符串表示引号中间没有任何(包括空格)内容

容器类型的数据结构[‘’] [ ]

运算: 
    算数运算 + * / // ** % 
    比较运算 > < == !=  <= >= 
    逻辑运算 and (与运算&&)   or(或运算||)  not(非运算!)
运算符 条件1 条件2 结果
and (一假全假,全真为真) True True True
or (一个真全真,全假为假) True False True
not (真变假,假变真) True False
# 1.判断某年是否是闰年 
#    A.能被4整除,但不能被100整除
#    B.能被400整除
year = int(input("请输入年份"))

if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print(f"{year}是闰年!")
else:
    print(f"{year}不是闰年!")

编程的三种范式

  • 结构化编程
  • 函数式编程
  • 面向对象编程
字符串格式化: 将变量值嵌入到一个字符串中。f"{变量}"  %类型(d整数、f浮点数、s字符串)
转义字符:  \n 换行  \t 制表符  \r 回车  \\     r"" 让转义字符不生效