我们可以通过调试,来观察程序执行的顺序。(运行环境:pycharm)
点击小虫子后,点击下一步,不断调试。
可以发现,程序是按照顺序,从上向下执行的,这就是顺序结构。
Python中一切皆为对象,所有对象都有一个布尔值。获取对象的布尔值使用内置函数bool()
。
以下对象的布尔值为False
:
代码示例:
# 测试对象的布尔值
print('---------------以下对象的布尔值均为False---------------')
print(bool(False)) # False -- False
print(bool(0)) # 0 -- False
print(bool(0.0)) # 数字0 -- False
print(bool(None)) # None -- False
print(bool('')) # 空字符串 -- False
print(bool("")) # 空字符串 -- False
print(bool([])) # 空列表 -- False
print(bool(list())) # 空列表 -- False
print(bool(())) # 空元组 -- False
print(bool(tuple())) # 空元组 -- False
print(bool({})) # 空字典
print(bool(dict())) # 空字典
print(bool(set())) # 空集合
print('------------------其他对象的布尔值均为True----------------------')
print(bool(1))
print(bool('hello world'))
print(bool(True))
输出:
---------------以下对象的布尔值均为False---------------
False
False
False
False
False
False
False
False
False
False
False
False
False
------------------其他对象的布尔值均为True----------------------
True
True
True
1.单分支结构
语法结构:
if 条件表达式
条件执行体
例:
num = 10
if num > 0:
print(num, '大于 0')
输出:
10 大于 0
2.双分支结构:
语法结构:
if 条件表达式
条件执行体1
else
条件执行体2
例:
# 双分支结构
money = 1000 # 有1000块钱存款
s = int(input('请输入取款金额:')) # 要取走多少钱
if money >= s:
money -= s
print('取款成功,余额为:', money)
else:
print('取款失败,余额不足')
输出1:(200是我们输入的数据)
请输入取款金额:200
取款成功,余额为: 800
输出2:
请输入取款金额:1200
取款失败,余额不足
3.多分支结构:
语法结构:
if 条件表达式1:
条件执行体1
elif 条件表达式2:
条件执行体2
elif 条件表达式N:
条件执行体N
[else:] # []括起来的内容可写可不写
条件执行体N+1
例:
# 多分支结构
'''
多选一执行
判断成绩的好坏:(整数)
90-100 A
80-89 B
70-79 C
60-69 D
0-59 E
大于100或小于0为非法数据
'''
score = int(input('请输入成绩:'))
if score >= 90 and score <= 100:
print('A')
elif score >= 80 and score <= 89:
print('B')
elif score >= 70 and score <= 79:
print('C')
elif score >= 60 and score <= 69:
print('D')
elif score >= 0 and score <= 59:
print('E')
else:
print('输入数据非法')
认识一下Python中的优雅写法:
score = int(input('请输入成绩:'))
if 90 <= score <= 100:
print('A')
elif 80 <= score <= 89:
print('B')
elif 70 <= score <= 79:
print('C')
elif 60 <= score <= 69:
print('D')
elif 0 <= score <= 59:
print('E')
else:
print('输入数据非法')
不同于C和C++,Python中可以直接使用数学中的写法:90 <= score <= 100
4.嵌套if:
语法结构:
if 条件表达式1:
if 内层条件表达式2:
内层条件执行体1
else:
内层条件执行体2
else:
条件执行体
例:
'''
买东西,会员的折扣和非会员的折扣不一样
会员 200<=money 5折
100<=money<200 8折
money<100 不打折
非会员 200<=money 8折
100<=money<200 9.5折
money<100 不打折
'''
answer = input('您是会员吗?是/否:')
money = int(input('您一共消费的金额是:'))
if answer == '是':
print('享受会员优惠')
if 200 <= money:
print('您实际消费', money*0.5, '元')
elif 100 <= money < 200:
print('您实际消费', money*0.8, '元')
elif money < 100:
print('您实际消费', money, '元')
else:
print('不享受会员优惠')
if 200 <= money:
print('您实际消费', money*0.8, '元')
elif 100 <= money < 200:
print('您实际消费', money*0.95, '元')
elif money < 100:
print('您实际消费', money, '元')
5.条件表达式:
条件表达式是if…else的简写。
语法结构:x if 判断条件 else y
运算规则:如果判断条件的布尔值为True,条件表达式的返回值为x,否则条件表达式的返回值为y。
例:
'''比较两个数的大小'''
num_a = int(input('请输入第一个数:'))
num_b = int(input('请输入第二个数:'))
print(str(num_a) + '大于等于' + str(num_b) if num_a >= num_b else str(num_a) + '小于' + str(num_b))
6.pass语句:
作用:语句什么都不做,只是一个占位符,用在语法上需要语句的地方。
使用场景:先搭建语法结构,还没想好代码怎么写的时候。
与哪些代码一起用?
例:
# pass 语句
'''什么都不做,只是一个站位符,用在需要写语句的地方'''
answer = input('您是会员吗?是/否:')
money = int(input('您一共消费的金额是:'))
if answer == '是':
pass
else:
pass
1.作用:用于生成一个整数序列。
2.创建range对象的三种方式:
1)range(stop)
创建一个[0,stop)
之间的整数序列,步长为1。
"""第一种方式,只给了一个参数,小括号中只有一个数"""
r = range(10) # 默认从0开始,到10结束,步长默认为1
print(r) # 返回值是一个迭代器对象,我们看不到range中的具体数据
print(list(r)) # 用list查看range对象中的整数序列 --> list是列表的意思
输出:
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2)range(start, stop)
创建一个[start,stop)
之间的整数序列,步长为1。
'''第二种方式,给了两个参数,第一个数是start,第二个数是stop'''
r = range(1, 10) # 指定从1开始,到10结束(不包括10),默认步长是1
print(r) # range(1, 10)
print(list(r)) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
输出:
range(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
3)range(start, stop, step)
创建一个[start,stop)
之间的整数序列,步长为step
。
'''第三种方式,给了三个参数,第一个是start,第二个是stop,第三个是step'''
r = range(1, 10, 3) # 指定从1开始,到10结束(不包括10),指定步长是3
print(r) # range(1, 10, 3)
print(list(r)) # [1, 4, 7]
输出:
range(1, 10, 3)
[1, 4, 7]
3.range()函数的返回值是一个迭代器对象(你看不到range中的具体数据)。
4.range类型的优点:
不管range
对象表示的整数序列有多长,所有range
对象占用的内存空间都是相同的,因为仅仅需要存储start
,stop
和step
,只有当用到range
对象时,才会去计算序列中的相关元素。
5.用in和not in来判断整数序列中是否存在指定的整数:
'''判断整数序列中是否存在指定的整数 in,not in'''
print(10 in r) # False
print(4 in r) # True
print(10 not in r) # True
print(4 not in r) # False
输出:
False
True
True
False
1.语法结构:
while 条件表达式:
条件执行体(循环体)
例:
a = 1 # 初始化判断
while a < 10: # 判断
print(a) # 打印a
a += 1 # 调整
输出:
1
2
3
4
5
6
7
8
9
2.选择结构的if与循环结构while的区别
if
是判断一次,条件为True
执行一次while
是判断N+1次,条件为True
执行N次3.实际应用:
'''while循环四步走
1.初始化变量
2.条件判断
3.条件执行体(循环体)
4.改变变量
总结:初始化,判断,改变的变量是同一个变量
'''
# 计算1-100的累加和
sum = 0 # sum记录和
n = 1
while n <= 100:
sum += n
n += 1
print('和为', sum)
输出:
5050
4.练习:
# 求1-100之间的偶数和
sum = 0
n = 1
while n <= 100:
if not bool(n % 2):
sum += n
n = n + 1
print(sum)
分析:
0
的布尔值为False
,如果一个数对2
取余结果是0
,说明它是偶数;是偶数就执行if
语句中的执行体,那么条件表达式的值应该为True
;所以可以对n % 2
逻辑取反。
1.介绍:
in
表达从(字符串、序列等)中依次取值,又称为遍历。for-in
遍历的对象必须是可迭代对象(目前接触到的可迭代对象有两个,一个是字符串,一个是序列)。2.语法结构:
for 自定义的变量 in 可迭代对象:
循环体
例1:
"""依次把Python取出,赋值给item"""
for item in 'Python':
print(item)
输出:
P
y
t
h
o
n
例2:
# range()产生整数数列,也是一个可迭代对象
for i in range(10):
print(i)
输出:
0
1
2
3
4
5
6
7
8
9
3.循环体内不需要访问自定义变量,可以将自定义变量替代为下划线
# 如果在循环体中用不到自定义变量,可以用"_"代替
for _ in range(5):
print("Python")
输出:
Python
Python
Python
Python
Python
4.练习:
print('用for循环计算1-100之间的偶数的累加和')
sum = 0 # 用来记录累加和
for i in range(1, 101): # 整数序列为1-100
if not bool(i % 2):
sum += i
print(sum)
输出:
用for循环计算1-100之间的偶数的累加和
2550
5.打印100-999之间的水仙花数
# 打印100-999之间的水仙花数
"""
举例:
153=3*3*3+5*5*5+1*1*1
"""
for item in range(100, 1000):
ge = item % 10 # 个位数字
shi = item // 10 % 10 # 十位数字
bai = item // 100 # 百位数字
if item == ge ** 3 + shi ** 3 + bai ** 3:
print(item)
输出:
153
370
371
407
1.作用:用于结束循环结构,通常与分支结构一起使用。
2.示例:
# 流程控制语句break
n = 3
print('你有', n, '次机会')
for item in range(n):
pdw = input('请输入密码:')
if pdw == '8888':
print('密码正确')
break
else:
print('密码错误')
print('你还有', n - item - 1, '次机会')
# while循环实现
n = 3
i = 1
print('你共有', n, '次机会')
while i <= n:
pdw = input('请输入密码:')
if pdw == '8888':
print('密码正确')
break
else:
print('密码错误')
print('你还有', n - i, '次机会')
i += 1
1.作用:用于结束当前循环,进入下一次循环,通常和分支语句一起使用。
2.示例:
'''要求输出1-50之间所有5的倍数'''
for item in range(1, 51):
if item % 5 == 0:
print(item)
print('----------------------------------')
'''要求使用continue实现'''
for item in range(1, 51):
if item % 5 != 0:
continue
print(item)
1.if中的else语句:太简单了,不写了。
2.循环中的else语句:
如果没有遇到break
,当循环正常执行完时,else
后的语句执行。
1)for-in
中的else
:
"""还是以输入密码的练习为例"""
for _ in range(3):
pdw = input('请输入密码:')
if pdw == '8888':
print('密码正确')
break
print('密码错误')
else:
print('3次输入均错误,登入失败')
2)while
中的else
:
'''while循环实现'''
# 变量的初始化
n = 0
'''条件表达式'''
while n < 3:
'''条件执行体,循环体'''
pdw = input('请输入密码:')
if pdw == '8888':
print('密码正确')
break
print('密码错误')
'''变量的调整'''
n += 1
else:
print('3次输入均错误,登入失败')
以一个实例说明:打印9 * 9
乘法表格
"""打印9*9乘法表格"""
for i in range(1, 10): # 从1-9,共9行
for j in range(1, i + 1):
print(i, '*', j, '=', i * j, end='\t') # 不要换行
print() # 换行
输出:
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
1.二重循环中的break和continue只用于控制本层循环
1)break
示例:
"""多重循环中的break"""
for _ in range(5):
for j in range(1, 11):
if j % 2 == 0:
break
print(j)
"""
分析:
1.刚开始时j的值为1,j%2的值是1,if条件不成立,break不执行,执行print,打印1
2.内层循环第二趟,j为2,if条件成例,执行break,print不执行
3.break执行跳出内层循环,开始进入第二次外层循环,再重复一二过程
4.外层循环控制内层循环的执行次数,内层循环共执行5次
"""
输出:
1
1
1
1
1
总结:break
跳出本层循环。
2)continue
示例:
"""多重循环中的continue"""
for _ in range(5):
for j in range(1, 11):
if j % 2 == 0:
continue
print(j, end = '\t')
print()
"""
分析:
1.刚开始时j的值为1,j%2的值是1,if条件不成立,continue不执行,执行print,打印1
2.内层循环第二趟,j为2,if条件成例,执行continue,print不执行
3.continue执行跳过当前内层循环后面的语句,继续内层循环
4.此时j为3,if条件不成立,continue不执行,执行print,打印3
5.以此类推,内层循环执行完一趟就会打印出一行1 3 5 7 9
6.一共打印5行
"""
总结:continue
跳过当前这次循环后面的语句,也是控制当前循环。