Day 03 浅析Python之分支循环
分支
单分支结构
-
应用场景: 如果xxx就xxx(满足条件才执行某个操作,如果不满足这个条件,就不执行)
-
语法:
if 条件语句 :
代码段
- 说明
if - 关键字,固定写法
条件语句 - 判断语句(可以是任何有结果的表达式)
冒号(😃 - 固定写法(注意:必须是英文输入法的冒号)
代码段 - 结构上是和if保持一个缩进的一条或者多条语句,逻辑行代码段就是满足条件才会执行的 代码
#案例1: 如果age大于18就打印成年
age = 48
if age >= 18:
print("成年")
#案例2: 如果year对应的是闰年,就打印"闰年"
year = 1990
if (year % 400 == 0) or (year % 4 ==0 and year % 100 != 0):
print("闰年")
#练习1: 根据num打印偶数
num = 209
if num % 2 == 0:
print("偶数")
#练习2: 如果num不能被3整除就让num加1
num = 30
if num % 3 != 0:
num += 1
print(num)
双分支结构
-
应用场景: 如果xxx就xxx否则就xxx(满足条件执行某个操作,条件不满足的时候执行另一个操作)
-
语法:
if 条件语句 :
代码段1(,满足条件需要执行的代码)
else:
代码段2(条件不满足的时候执行的代码)
#案例: 根据age值打印"成年"或者"未成年"
age = 18
if age < 18:
print("未成年")
else:
print("未成年")
多分支结构
-
应用场景: 如果xxx就xxx,如果xxx就xxx,如果xxx就xxx,…(根据不同的条件执行不同的代码)
-
语法:
语法1
if 条件语句1 :
代码段1
if 条件语句 :
代码段2
if 条件语句3 :
代码段3
…
- 语法2
if 条件语句1 :
代码段1
elif 条件语句2 :
代码段2
elif 条件语句3 :
代码段3
…
else:
代码段N
#案例: 根据年龄值打印年龄属性
age = int(input("请输入你的年龄"))
if age <=3:
print("幼儿")
if 3 < age <= 12:
print("儿童")
if 12 < age <= 18:
print("青少年")
if 18 < age <= 28:
print("青年")
if 28 < age <= 39:
print("壮年")
if 39 < age <= 65:
print("中年")
if age > 65:
print("老年")
#案例: 根据年龄值打印年龄属性
if age <= 3:
print("幼儿")
elif age<= 12:
print("儿童")
elif age<= 18:
print("青少年")
elif age<= 28:
print("青年")
elif age<= 39:
print("壮年")
elif age<= 65:
print("中年")
else:
print("老年")
02 for循环
语法
for 变量 in 序列:
循环体
说明
- for - 关键字;固定写法
- 变量 - 变量名(已经定义过的或者没有定义过的都行)
- in - 关键字;固定写法
- 序列 - 可以是任何容器型数据类型的数据,例如:字符串,列表,字典,元组,集合等
- 冒号(😃 - 固定写法
- 循环体 - 结构上循环体就是和for保持一个缩进的一条或者多条语句(至少一句)
执行过程
- 变量在序列中取值,一个一个地取,取完为止
- 每取一个就执行一次
- for循环中要控制循环次数,只需要控制序列中元素地个数
#案例1
for i in "misk":
print(i,"hello world")
range()函数-创建等差数列地函数
- range(N):产生[0,N)的等差数列,差是;
- range(M,N):产生[M,N)的等差数列,差是1;
- range(M,N,step):产生[M,N)的等差数列,布长为step;
#案例
for i in range(10)
print(i)
for i in range(5,10)
print(i)
for i in range(1,10,2)
print(i)
for i in range(6,1,-1)
print(i)#打印6,5,4,3,2
for循环的应用
累计求和
- 定义变量用来保存最后的和,变量默认值是0
- 用循环依次获取所有求和的数据
- 在循环体中每获取一个需要求和的数据,就累加到用来保存最后的和的变量中去
#案例1: 用循环求1+2+3+...+100的和
sum_num = 0
for i in range(1,101):
sum_num += i
print(sum_num)
#案例2: 求scores中所有分数的和
scores = [98,34,78,89,78,12,56,45]
total_scores = 0
for i in scores:
total_scores += i
print(total_scores)
#练习1: 求scores所有几个学生的总分
scores = [98,34,78,89,78,12,56,45]
total_scores = 0
for i in scores:
if i > 60 :
total_scores += i
print(total_scores)
统计个数
- 定义变量保存最后的个数,默认值为0
- 通过循环获取统计对象
- 获得一个统计对象个数就加1
#案例1:根据scores统计不及格学生的人数
scores = [98,34,78,89,78,12,56,45]
count = 0
for i in scores:
if i < 60:
count += 1
print(count)
#案例2: 统计1000以内能被3整除的数(不包括0)
#方法一:
count = 0
for i in range(1,1000):
if i % 3 == 0:
count += 1
print(count)
#方法二:
count = 0
for i in range(3,1000,3):
count += 1
print()
基础题
-
根据输入的成绩的范围打印
及格
或者不及格
。score = float(input("请输入你的成绩:")) if score < 60: print("不及格") else: print("不及格")
-
根据输入的年纪范围打印
成年
或者未成年
,如果年龄不在正常范围内(0~150)打印这不是人!
。age = int(input("请输入你的年龄:")) if age > 150:#频率不是很高的数据,执行次数最多,不好. print("这不是人") elif age >= 18:#这种范围从前往后写的思路要掌握 print("成年") elif age > 0: print("未成年") else: print("这不是人")
-
输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息
a-b的结果不是奇数
a = int(input("请输入整数a:")) b = int(input("请输入整数b:")) if a - b <= 0: print("a-b的结果不是奇数") else: if (a - b) % 2 != 0: print(a, " - ", b, " = ", a - b) else: print("a-b的结果不是奇数")
-
使用for循环输出 0~100内所有3的倍数。
for i in range(3,100,3): print(i,end=" , ") #0不是3的倍数
-
使用for循环输出100~200内个位数或者十位数能被3整除的数。
for i in range(100, 201): if i % 10 % 3 == 0 or i // 10 % 10 % 3 == 0: # 0能被3整除 print(i)
-
使用for循环统计100~200中十位数是5的数的个数
count = 0 for i in range(100, 201): if i // 10 % 10 == 5: #取余是保留低位数,取整是舍弃低位数 count += 1 print(count)
-
使用for循环打印50~150中所有能被3整除但是不能被5整除的数
for i in range(50, 151): if i % 3 == 0 and i % 5 != 0: #个位数是0或者5 print(i)
-
使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
sum_nums = 0 for i in range(50, 151): if i % 3 == 0 and i % 5 != 0: sum_nums += i print(sum_nums)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count = 0 for i in range(101): if i % 10 ==2 and i % 3 == 0: count += 1 print(count)
进阶题
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
int_num = int(input("请输入一个正整数:")) count = 1 num = int_num while True: if int_num // 10 >= 1: count += 1 print(count) int_num //= 10 else: break print(num,"是",count,"位数")
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for i in range(100, 1000): units = i % 10 tens = i % 100 // 10 hundreds = i // 100 if units ** 3 + tens ** 3 + hundreds ** 3 == i: print(i, end=" , ")
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 89 count = 0 for i in range(1, num + 1): if num % i == 0: count += 1 if count == 2: print(num, "是素数")
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1, 10):# 第二个乘数 for j in range(1, i + 1):# 第一个乘数不能比第一个大 print(j, " * ", i, " = ", i * j, end=" ") print()
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
#分析:大马最多33只,中马最多50只,小马最多98只 for big_horse in range(1, 34): for mid_horse in range(1, 50): for small_horse in range(2, 98, 2): if big_horse * 3 + mid_horse * 2 + small_horse / 2 == 100: if big_horse + mid_horse + small_horse == 100: print("百马百担问题中,可能出现组合,大马:", big_horse, "中马:", mid_horse, "小马:", small_horse)
总结几点
# 解释型语言和编译型语言
# 任何数据类型都可以转换成bool类型
# 取余是取后面位数,整除是去除后面位数
# bool数据参与数学运算时,True为1,Flase是0
# python对大小写敏感
# 空字符也有占位