一. 顺序语句
默认情况下,Python 的代码执行顺序,是从上到下依次执行的:
执行结果一定为 “123”,而不会出现 “321” 或者 “132” 等。这种按照顺序执行的代码,我们称为 顺序语句。
这个顺序是很关键的。编程是一件明确无歧义的事情,安排好任务的顺序,计算机才能够正确的进行执行。
二. 条件语句
1. 什么是条件语句
条件语句能够表达 “如果 … 否则 …” 这样的语义,这构成了计算机中基础的 逻辑判定。
即条件语句,就是根据一个具体条件的成立于否,来决定接下来的逻辑走向。
语法格式
Python 中使用 if、elif、else 关键字表示条件语句:
注意:Python 中的条件语句写法,和很多编程语言不太一样,具体体现在以下三点:
- if 后面的条件表达式,没有 ( ),使用 : 作为结尾来代替。
- if / elif / else 命中条件后要执行的 “语句块”,使用 缩进 (通常是 4 个空格或者 1 个 tab)来表示,而不是 { }
- 对于多条件分支,不是写作 else if,而是 elif (合体了)
代码示例
示例:输入 1 表示早餐吃包子,输入 2 表示早餐吃泡馍。
choice = input("输入 1 表示早餐吃包子,输入 2 表示早餐吃泡馍:")
if choice == '1':
print("包子")
else:
print("泡馍")
实际开发中,用户的输入,很有可能是出乎意料的!本来期望用户输入 1 或者 2,但是用户实际输入了3:
对于非法情况的判定,也是非常必要的!因为你永远不知道用户会如何操作:
choice = input("输入 1 表示早餐吃包子,输入 2 表示早餐吃泡馍:")
if choice == '1':
print("包子")
elif choice == '2':
print("泡馍")
else:
print("输入有误")
2. 缩进和代码块
代码块 指的是一组放在一起执行的代码。在 Python 中使用缩进表示代码块。不同级别的缩进,程序的执行效果是不同的:
Python 是基于缩进的方式表示代码块的,带来的好处就是强制要求程序猿要写明确的缩进,以明确代码之间的相对关系。如果缩进书写的不对,则直接报错:
PS:在 C++/Java 中,对于代码缩进是没有强制要求的,缩进具体怎么写都不影响代码的编译运行结果。如果缩进没有很好的统一风格来写,也就是对于可读性比较影响。
此外,Python 中的代码块还可以嵌套,看下面这个例子:
同时,嵌套带来的坏处就是:如果缩进层次比较多,就容易分不清楚某个语句属于哪个缩进层级:
因此,就有了 “写 Python 需要自备游标卡尺” 这个梗:
因为 Python 是通过缩进来区分代码块的(而不是 { } 或者是其他符号),而不是像其他程序语言,缩进仅仅为了可读性。导致打印出来的 Python 代码(比如书),需要肉眼看缩进,有时候遇上翻页,或者代码逻辑比较复杂,缩进比较多时,就需要用尺子来区分代码块了,如果看书不带游标卡尺的话,你就不知道缩进了几层,当然是个夸张的说法。
我们在实际开发中还是要尽量避免写出这种嵌套关系非常复杂的代码的,这样子可读性太差了!
3. 空语句 pass
看如下代码:
if a != '1':
# 我这儿啥都不做
else:
print('hello')
编译后报错。虽然希望条件满足的时候啥都不做,但是因为 Python 对于语法格式,尤其是缩进和代码块的要求较严格,所以如果啥都不写(只写个注释)是不符合语法要求的。
这种情况下,可以使用空语句(pass)进行占位:
if a != '1':
pass
else:
print('hello')
其中 pass 表示空语句,并不会对程序的执行有任何影响,只是占个位置,保持 Python 语法格式符合要求。
很多地方都是如此,虽然我们啥都不想做。但是也得写个 pass 空语句来占位。
4. 练习
(1)输入一个整数,判定是否是奇数
num = int(input('请输入一个整数:'))
if num % 2 == 1:
print('奇数')
else:
print('偶数')
补充说明:
-
Python 中取模运算得到的结果都是正整数:
-
int() 函数的转换默认是按照 十进制 的方式来解析的。其参数必须是十进制的整数字符串,如果不符合,在运行时会直接报错:
(2)输入一个整数, 判定是正整数还是负整数
整数包括:正整数、负整数和0
num = int(input('请输入一个整数:'))
if num > 0:
print('正整数')
elif num < 0:
print('负整数')
else:
print('为0')
(3)判定年份是否是闰年
满足以下两个条件之一的年份就是闰年:
- 能被 4 整除,但是不能被 100 整除
- 能被 400 整除
year = int(input("请输入年份:"))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print("闰年")
else:
print("平年")
三. 循环语句
有些操作是需要反复执行的,这种就需要使用循环。
1. while 循环
基本语法格式:
while 条件:
循环体
- 条件成立,则执行循环体,完事后再去判断条件
- 条件不成立,则循环结束,退出循环
注意:
代码示例
1、打印 1-10 的整数
num = 1
while num <= 10:
print(num)
num += 1
2、计算 1-100 的和
sum = 0
num = 1
while num <= 100:
sum += num
num += 1
print(f'sum = {sum}')
3、计算 5 的阶乘
ret = 1
num = 1
while num <= 5:
ret *= num
num += 1
print(f'5! = {ret}')
4、求 1! + 2! + 3! + 4! + 5!
# 从 1 的阶乘开始算
i = 1
# ret 表示最终的加和结果
ret = 0
while i <= 5:
# 先计算出当前 i 的阶乘是多少,算出后往 ret 上加
j = 1
partSum = 1
while j <= i:
partSum *= j
j += 1
ret += partSum
i += 1
print(f'1! + 2! + 3! + 4! + 5! = {ret}')
2. for 循环
基本语法格式:
for 循环变量 in 可迭代对象:
循环体
补充说明:
-
python 的 for 和其他语言不同,没有 “初始化语句”、“循环条件判定语句” 和 “循环变量更新语句”,而是更加简单地去遍历取值,相当于 C++ 的 范围for
-
所谓的 “可迭代对象”,指的是 “内部包含多个元素,并能够一个一个把元素取出来的特殊变量”。
代码示例
1、打印 1-10
# 使用 range 函数,能够生成一个可迭代对象
# 生成的范围是 [1, 11),也就是 [1, 10]
for num in range(1, 11):
print(num)
可迭代对象,是一种特殊的变量,其内部包含了很多的值。
这里重点介绍一下 range()
。它是 Python 的一个内建函数,起到的效果就是得到一个 “可迭代对象”,这个可迭代对象中就包含了一系列的整数,比如 range(begin, end) 对应整数区间 [begin, end),是一个前闭后开的区间。
2、打印 2, 4, 6, 8, 10
range 还提供了第三个参数用来表示步长,其默认值是 1。通过 range 的第三个参数,可以指定迭代时候的 “步长”,也就是控制一次让循环变量加几。
for num in range(2, 11, 2):
print(num)
3、打印 10-1
range 的步长也可以设定成负数。
for num in range(10, 0, -1):
print(num)
continue 和 break 语句
continue
:立即结束当前这次循环,进入下一次循环
break
:立即结束整个循环