分支和循环
01. if 分支结构
1. 程序流程控制
1)顺序执行 - 代码从上往下一条一条的按顺序执行(默认)
2)分支结构 - 根据条件选择执行或者不执行某些代码**(if语句)**
3)循环结构 - 让一段代码重复执行 (for循环、while循环)
2. 分支结构----if语句:
python中实现能够实现分支结构的只有 if
(1)if单分支结构 - if
-
应用场景:如果满足某个条件就执行某段代码,条件不满足就不执行
语法:**
if 条件语句:
代码段**
说明:
1. if - 关键字:( 固定写法 )
2. 条件语句 – 任何有结果的表达式(包括:具体的数据、已经赋值过的变量、 运算表达式-赋值语句除外…)
3.(冒号 :) – 固定写法(注意:必须使用英文输入法下的冒号)
4. 代码段 – 和if保持一个缩进的一条或者多条语句;需要在满足条件才会执行的代码
执行过程:
先判断if后面的条件语句是否为True( 如果不是布尔 就看结果的布尔值是否是True )
如果是True,就执行代码段,否则代码段不执行
练习1:如果指定的年龄已成年就打印'成年'
age = 19
if age >= 18:
print('成年')
(2)if 双分支结构: if - else
- 应用场景:满足条件执行某个操作,不满足的时候执行另外一个操作
语法:
if 条件语句:
代码段1(满足条件需要执行的代码)
else:
代码段2(不满足条件的时候需要执行的代码)
执行过程:
判断条件语句是否为True,如果为True就执行代码段1;否则执行代码段2。
练习1:根据num的值打印 '偶数' 或者 '奇数'
num = 13
if num % 2 == 0:
print('偶数')
else:
print('奇数')
练习2:根据year的值打印 '闰年' 或者 '非闰年'
year = 2020
闰年的条件:1)能被400整除 2)能被4整除,但是不能被100整除
1)year % 400 == 0 2)year % 4 == 0 and year % 100 != 0
(year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)
写法一:
if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
print('闰年')
else:
print('平年')
写法二:
condition = (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0)
if condition:
print('闰年')
else:
print('平年')
02. if 多分支结构
1. if-elif-else
- 应用场景:针对不同的条件实现不同的操作。(不同的条件之间满足:如果其中一个条件已经满足,就没有再判断其他条件的必须)
语法:
if 条件语句1:
代码段1
elif 条件语句2:
代码段2
elif 条件语句3:
代码段3
else:
代码段N
注意: 后面的条件是在前面的条件不成立的前提下 进行判断的
# 练习. 根据输入的年纪范围打印成年或者未成年,如果年龄不在正常范围内(0~150)打印这不是人!
if age < 0 or age > 150:
print('不是人!')
elif age >= 18:
print('成年人')
else:
print('未成年人')
age < 0 or age >150 -->if True -> print('不是人')
age >= 18 else -> True -> print ('成年人')
else -> True --->print('未成年人')
03. for循环
1. for循环 (让代码重复执行)
语法:
for 变量 in 序列 :
循环体
说明:
1) for - 关键字;固定写法
2) 变量 - 和定义变量的时候变量名的要求和规范一样(如果这个变量在循环体中不使用,变量名可以用_代替)
3) in - 关键字:固定写法
4) 序列 - python中容器型数据类型,例如:字符串、列表、元组、集合、字典、迭代器、生成器、range等…
5) 冒号 : - 固定写法
6) 循环体 - 和for保持一个缩进的一条或者多条语句;需要重复执行的代码
执行过程:
让变量去 序列 中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。
(for循环的执行次数,看序列中元素的个数)
for x in ' a b c ':
print(x, 'hello world!')
2. range函数 - 产生指定范围的数字序列
(1). range(N) - 产生一个[0, N) 的数字序列(N是正整数);例如:range(4) - 产生 0、1、2、3 的数字序列
for x in range(4):
print('x1:', x)
(2). range(M, N) - 产生一个[M, N) 的数字序列(M<N,并且M和N是整数);例如:range(-3, 3) - 产生: -3、-2、-1、0、1、2
for x in range(-3, 3):
print('x2:', x)
(3) range(M, N, step) - 产生一个[M, N)的数字序列,每次数值增加step;例如:range(-3, 3, 2) - 产生:-3、-1、1
for x in range(-3, 3, 2):
print('x3:', x)
# 练习1: 计算1+2+3+4+...+100的和
sum1 = 0
for x in range(1, 101):
sum1 += x
print('和:', sum1)
print(sum1) -> print(5050)
# 练习2:统计1000以内能够被3整除的数的个数
count = 0
for x in range(1000): 方法二:(0,1000,3):
if x % 3 == 0:
count += 1
print('个数:', count)
# 练习3:打印1000以内能够被3整除并且个位数是2的所有的数
方法一:
for x in range(1000):
if x % 3 == 0 and x % 10 == 2:
print(x, end=' ')
print()
方法二:先生成1000以内所有3的倍数,然后再看3的倍数中谁的个位数是2
for x in range(0, 1000, 3):
if x % 10 == 2:
print(x, end=' ')
方法三:先生成1000以内所有个位数是2的数,然后再看个位数是2的数中谁可以被3整除
2 12 22 32 42 52 ... 92 102 112 ...
for x in range(2, 1000, 10):
if x % 3 == 0:
print(x, end=' ')
print()
作业
基础题
-
根据输入的成绩的范围打印
及格
或者不及格
。score = int(input('请输入成绩')) if score >= 60: print('及格') else: print('不及格')
-
根据输入的年纪范围打印
成年
或者未成年
,如果年龄不在正常范围内(0~150)打印这不是人!
。age = int(input('请输入年龄')) if age < 18: print('未成年') elif age < 150: print('成年') else: print('这不是人')
-
输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息
a-b的结果不是奇数
a = int(input('请输入一个数')) b = int(input('请输入一个数')) num = a - b if num % 2 == 0: print('a-b的结果不是奇数') else: print(num)
-
使用for循环输出 0~100内所有3的倍数。
for x in range(3, 100, 3): print(x)
-
使用for循环输出100~200内个位数或者十位数能被3整除的数。
for x in range(100, 200): if (x % 10) % 3 == 0 or (x // 10 % 10) % 3 == 0: print(x)
-
使用for循环统计100~200中十位数是5的数的个数
for x in range(100, 200): if x // 10 % 10 == 5: print(x)
-
使用for循环打印50~150中所有能被3整除但是不能被5整除的数
for x in range(50, 150): if x % 3 == 0 and x % 5 != 0: print(x)
-
使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
sum1 = 0 for x in range(50, 150): if x % 3 == 0 and x % 5 != 0: sum1 += x print(sum1)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count = 0 for x in range(100): if x % 10 == 2 and x % 3 == 0: count += 1 print(count)
进阶题
-
输入任意一个正整数,求他是几位数?
num = int(input('请输入一个正整数')) count = 0 while num > 0: num = num // 10 count += 1 print(count)
注意: 这儿不能使用字符串,只能用循环 (会用到while循环)
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for x in range(100, 1000): gw = x % 10 sw = x // 10 % 10 bw = x // 100 if bw**3 + sw**3 + gw**3 == x: print(x)