day03-分支和循环
回顾
-
变量
命名规范:硬性, 非硬性
变量赋值:同时赋值, 交换值
底层原理
-
运算符
算术运算符, 比较运算符, 逻辑运算符, 赋值运算符
赋值运算符没有结果
优先级
流程控制
"""
根据控制代码执行方式的不同,将代码分为3种结构:
1)顺序结构(默认) - 代码从上往下按顺序依次执行,并且每条语句只执行一次
2)分支结构(if语句) - 根据条件选择执行代码
3)循环结构(for,while) - 让代码重复执行(代码写一遍,执行多次)
"""
顺序结构代码
a = 10
print(a)
分支结构
- if单分支结构 - 如果xxx就xxx
"""
语法:
if 条件语句:
代码段
说明:
1) if - 关键字;固定写法
2) 条件语句 - 可以是任何有结果的表达式,例如:具体数据,已经赋值过的变量,有结果的某种运算的运算表达式
3) : - 固定写法(英文标点)
4) 代码段 - 结构上就是和if保持一个缩进1条或多条语句(至少一条);逻辑上就是满足条件才会执行的代码
"""
条件语句可以是任何有结果的表达式
if 19:
print('满足条件才执行的代码')
练习1:根据年龄值打印’成年’
age = 18
if age >= 18:
print('成年')
练习2:如果num能被4整除就打印’4的倍数’
num = 212
if num % 4 == 0:
print('4的倍数')
- if双分支结构 - 如果xxx就xxx否则xxx
"""
语法:
if 条件语句:
代码段1(条件成立时执行)
else:
代码段2(条件不成立时执行)
补充:当条件语句不是布尔值,条件成立还是不成立看调价语句的结果转换成布尔值后是True还是False
布尔类型转换 - 所有类型的数据都可以转换成布尔值
转换的时候所有的零值和空值会转换成False,其他都是True
"""
练习:根据num的奇偶性打印’奇数’或者’偶数’
num = 31
if num % 2:
print('奇数')
else:
print('偶数')
练习2:根据year对应的年份打印’平年’ 或者 ‘闰年’
year = 2001
if (year % 4 == 0 and year % 100) or year % 400 == 0:
print('闰年')
else:
print('平年')
练习3:如果字符串str1是空串就打印’空字符串’,否则打印’非空字符串’
str1 = ''
if not str1:
print('空字符串')
else:
print('非空字符串')
- if多分支结构 - 根据不同条件做不同的事情:如果xxx就xxx,如果xxx就xxx,…
"""
方法1: - 条件之间满足:如果其中一个条件成立,其他条件也可能成立
if 条件语句1:
代码段1
if 条件语句2:
代码段2
if 条件语句3:
代码段3
...
方法2: - 条件之间满足:如果其中一个条件成立,其他条件绝对不会成立
if 条件语句1:
代码段1
elif 条件语句2:
代码段2
elif 条件语句3:
代码段3
...
else:
代码段N
"""
如果考试100分-买车, 如果90多分-买电脑, 如果80多分-买鞋, 如果低于80分-打死
score = 82
if score == 100:
print('买车')
if 90 <= score < 100:
print('买电脑')
if 80 <= score < 90:
print('买鞋')
if score < 80:
print('打死')
# 方法2
if score == 100:
print('买车')
elif 90 <= score < 100:
print('买电脑')
elif 80 <= score < 90:
print('买鞋')
elif score < 80:
print('打死')
练习:根据年龄范围打印: 幼儿(03)、少年(417)、青年(1838)、中年(3969)、老年(70及70岁上)
age = 40
if age >= 70:
print('老年')
elif age >= 39:
print('中年')
elif age >= 18:
print('青年')
elif age >= 4:
print('少年')
elif age >= 0:
print('幼儿')
else:
print('年龄错误')
- if嵌套
根据num的值打印’偶数’,‘奇数’和’4的倍数’
例如:1->‘奇数’ 2->'偶数 16->‘偶数’,‘4的倍数’
num = 22
if not (num % 2):
print('偶数')
if not(num % 4):
print('4的倍数')
else:
print('奇数')
for循环
- for循环 - 让代码重复执行
"""
语法:
for 变量 in 序列:
循环体
说明:
1)for,in - 关键字;固定写法
2)变量 - 变量名
3)序列 - 容器型数据类型的数据, 例如:字符串,列表,元组,集合,字典,迭代器,生成器,range
4): - 固定写法
5)循环体 - 结构上,循环体就是和for保持缩进的一条或者多条语句(至少一条);
逻辑上,循环体中的代码就是需要重复执行的代码
执行过程:
让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体.
for循环次数和序列中元素的个数有关
"""
- range函数 - 创建等差数列
"""
1)range(N) - 产生[0, N)的等差数列,差是1; 例如:range(3) - 0, 1, 2
2)range(M, N) - 产生[M, N)的等差数列,差是1; 例如:range(4, 7) - 4, 5, 6
2)range(M, N, step) - 产生[M, N)的等差数列,差是step;
step > 0时M < N,例如:range(1, 10, 3) - 1, 4, 7
step < 0时M > N,例如:range(-1, -10, -3) - -1, -4, -7
"""
for i in range(-5, 5):
print(i, end=' ')
print()
for i in range(-1, -10, -3):
print(i, end=' ')
print()
练习:利用range函数产生一个数字序列: -1, 1, 3, 5, 7
for i in range(-1, 8, 2):
print(i, end=' ')
print()
练习:利用range函数产生一个数字序列:0,1,2,3,4,5,6,7,8,9,10
for i in range(0, 11):
print(i, end=' ')
print()
练习:利用range函数产生一个数字序列:0,3,6,9,12,15
for i in range(0, 16, 3):
print(i, end=' ')
print()
产生:15, 13, 11, 9, 7
for i in range(15, 6, -2):
print(i, end=' ')
print()
- 实战
- 求和问题
练习1:用代码计算:1+2+3+…+100
sum1 = 0
for i in range(1, 101):
sum1 += i
print(sum1)
练习2:求nums中所有元素的和
nums = [10, 29, 30, 40]
sum2 = 0
for i in nums:
sum2 += i
print(sum2)
练习:求100以内所有奇数的和
sum3 = 0
for i in range(1, 100, 2):
sum3 += i
print(sum3)
练习4:求nums中所有奇数的和
nums = [10, 29, 30, 25, 40, 8, 1]
sum4 = 0
for i in nums:
if i % 2:
sum4 += i
print(sum4)
练习5:计算100以内所有能被3整除或者能被5整除的数的和
sum5 = 0
for i in range(1, 100):
if not (i % 3 and i % 5):
sum5 += i
print(sum5)
sum5 = 0
for i in set(list(range(3, 100, 3)) + list(range(5, 100, 5))):
sum5 += i
print(sum5)
- 统计个数
练习1:统计100以内偶数的个数
print(len(range(2, 99, 2)))
count = 0
for i in range(2, 99, 2):
count += 1
print(count)
练习2:统计100以内能被3整除或者能被4整除的数的个数
count = 0
for i in range(1, 100):
if not (i % 3 and i % 4):
count += 1
print(count)
count = 0
for i in set(list(range(3, 100, 3)) + list(range(4, 100, 4))):
count += 1
print(count)