day4-分支和循环
学习小结
1.流程控制
1)顺序结构:代码从上向下依次执行,每条语句只执行一次(默认)
2)分支结构:根据条件选择执行或者不执行部分代码(使用if函数)
3)循环结构:让代码重复执行(for、while)
2、分支结构
单分支:满足某个条件执行某个操作,条件不满足就不执行 (如果…就…)
比如:你爸对你说:“如果你考试考100分就奖励你一辆车”
双分支:满足某个条件执行某个操作,条件不满足就执行另外的操作(如果…就…否则就…)
比如:你爸对你说:“如果你考试考100分就奖励你一辆车,否则就打死你”
多分支:根据不同的条件执行不一样的操作
1) if单分支结构:如果…就…
语法:
if 条件语句:
代码段
说明:
if - 关键字;固定写法
条件语句 - 可以是任何有结果的表达式,包括:具体的数据、云实验表达式(赋值运算例外)、已经赋值的变量、函数调用表达式等
: - 固定写法(英文状态下的冒号)
代码段 - 从结构上就是和if保持一个缩进的一条或者多条语句(至少一条);逻辑上,就是条件成立的时候才会执行的代码
2)if双分支结构 - 如果… 就…否则…
语法:
if 条件语句:
代码段1(条件满足时需要执行的代码)
else:
代码段2(条件不满足时需要执行的条件)
# 判断一个整数的奇偶性
num = int(input('请输入一个整数:'))
if num % 2 == 0:
print('偶数')
else:
print('奇数')
3)if多分支结构 - 如果…就…如果…就…如果…就…否则…
语法:
if 条件1:
代码段1
elif 条件2:
代码段2
elif 条件3:
代码3
...
else:
代码段N
其他代码
根据对应分数打印相应的奖学金金额
# 90分以上 - 2000元
# (85,90]-1000元
# (75,85]-500元
# (60,75]- 200元
score = int(input('请输入分数:'))
if score > 90:
print('2000元')
elif 85 < score <= 90:
print('1000元')
elif 75 < score <= 85:
print('500元')
elif 60 < score <= 75:
print('200元')
else:
print('你该努力了')
3、循环结构
1)for循环
语法:
for 变量 in 序列:
循环体
说明:
for - 关键字;固定写法
变量 - 有效变量名(可以是已经定义的,也可以是没有定义过的)
in - 关键字;固定写法
序列 - 容器型数据类型的数据,包括:字符串、列表、字典、集合、元组、迭代器、生成器、range等
: - 固定写法
循环体 - 和for保持一个缩进的一条或者多条语句;循环体就是要重复执行的代码
执行过程:
让变量去序列中取值,一个一个的取,取完为止,取一个就执行一次循环
for循环的循环次数和序列中元素的个数有关
for h in 'hello':
print('循环')
4、range函数 - 创建等差数列(整数)
1)range(N) - 产生[0,N)的等差数列,差是1
2)range(M, N) - 产生[M, N)的等差数列,差是1
3)range(M,N,step) - 产生[M, N)的等差数列,差是step
for h in range(5):
print('23')
for h in range(5, 7):
print('23')
for h in range(3, 9, 2):
print('3')
# ;练习:打印1000以内的偶数
for h in range(0, 1000, 2):
print(h)
5、for循环的两个基本应用场景
1、积累
练习1:求1+2+3+…+100的和
第一步:定义保存的结果,变量的初始值一般是0(求和)或者1(求乘积)
result = 0
第二步:用循环一步一步的获取累积数据
for x in range(1, 101):
第三步:在循环体中将获取到的每一个数据合并到结果对应的变量中
result += x
print(result)
练习2:求10的阶乘:123*…*10
night = 1
for n in range(1, 11):
night *= n
print(night)
练习3:求100到200中所有能被3整除的偶数的和
result = 0
for h in range(100, 201):
if h % 3 == 0 and h % 2 == 0:
result += h
print(result)
可以进行优化
优化1
result = 0
for h in range(100, 201, 2):
if h % 3 == 0:
result += h
print(result)
优化2
result = 0
for h in range(102, 201, 6):
result += h
print(result)
2、统计个数
练习1:统计1000以内奇数的个数
第一步:定义变量保存最后的个数,
result = 0
第二步:使用循环语句统计对象
for x in range(1000):
第三步:遇到和条件相符合的数据就加1
if x % 2 == 1:
result += 1
print(result)
练习2:统计1000以内能3整除但是不能被7整除的数的个数
result = 0
for x in range(1000):
if (x % 3 == 0) and (x % 7 != 0):
result += 1
print(result)
练习作业
题目
基础题
- 根据输入的成绩的范围打印
及格
或者不及格
。 - 根据输入的年纪范围打印
成年
或者未成年
,如果年龄不在正常范围内(0~150)打印这不是人!
。 - 输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息
a-b的结果不是奇数
- 使用for循环输出 0~100内所有3的倍数。
- 使用for循环输出100~200内个位数或者十位数能被3整除的数。
- 使用for循环统计100~200中十位数是5的数的个数
- 使用for循环打印50~150中所有能被3整除但是不能被5整除的数
- 使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
- 统计100以内个位数是2并且能够被3整除的数的个数。
进阶题
-
输入任意一个正整数,求他是几位数?
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。 -
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
基础题
1、根据输入的成绩的范围打印`及格` 或者`不及格`
grade = float(input('请输入成绩:'))
if grade < 60:
print('不及格')
else:
print('及格')
2、根据输入的年纪范围打印`成年`或者`未成年`,如果年龄不在正常范围内(0~150)打印`这不是人!`
age = int(input('请输入年龄:'))
if 0 < age < 18:
print('未成年')
elif 18 <= age < 150:
print('成年')
else:
print('这不是人')
3、输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息`a-b的结果不是奇数`
a = int(input('请输入a:'))
b = int(input('请输入b:'))
x = a - b
if x % 2 != 0:
print(x)
else:
print('a-b的结果不是奇数')
4.使用for循环输出 0~100内所有3的倍数。
#for x in range(3, 100):
if x % 3 == 0:
print(x)
5、使用for循环输出100~200内个位数或者数能被3整除的数。
for x in range(100, 201):
if (x % 10) % 3 == 0 or (x // 10 % 10) % 3 == 0:
print(x)
优化:
for x in range(100, 201):
num_10 = x // 10 % 10
num_1 = x % 10
if (num_10 % 3 == 0 and num_10 != 0) or (num_1 % 3 == 0 and num_1 != 0):
print(x)
6、使用for循环统计100~200中十位数是5的数的个数
for x in range(100, 200):
if x // 10 % 10 == 5:
print(x)
优化:
for x in range(150, 160):
print(x)
7、使用for循环打印50~150中所有能被3整除但是不能被5整除的数
for x in range(51,151, 3):
if x % 5 != 0:
print(x)
8、使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
num = 0
for x in range(51, 148, 3):
if x % 5 != 0:
num += x
print(num)
9、统计100以内个位数是2并且能够被3整除的数的个数。
num = 0
for x in range(100):
if x % 10 == 2 and x % 3 == 0:
num += 1
print(num)
进阶
# 1、输入任意一个正整数,求他是几位数?
# 注意: 这儿不能使用字符串,只能用循环
number =2345
r = 0
for x in range(100000):
if number > 1:
r += 1
number /= 10
else:
break
print(r)
# 2、打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。
# 例如:153是⼀个⽔仙花数,因为 `1³ + 5³ + 3³ ` 等于 153。
for abc in range(100, 1000):
a = abc // 100
b = abc // 10 % 10
c = abc % 10
if a ** 3 + b ** 3 + c ** 3 == abc:
print(abc)
# 3、判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
number = int(input(""))
abc = '是质数'
for x in range(2, number):
if number % x == 0:
abc = '不是一个质素'
print(abc)
# 4、输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1, 10):
for j in range(1, i+1):
print(i, '*', j, '=', i * j, end=' ')
print('')
5、这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?
# (可以直接使用穷举法)
for x in range(1, 34):
for y in range(1, 51):
for z in range(100):
if x + y + z == 100 and x * 3 + y * 2 + z / 2 == 100:
print(x, y, z)