01 分支结构
-
分支结构(if):让程序根据条件执行代码
1)if单分支结构
2)if双分支结构
3)if多分支结构
-
if单分支结构:如果xxx就xxx(满足条件执行某个操作,条件不满足的时候这个操作就不执行)
语法:
""" 语法: if 条件语句: 代码段 说明: 1) if——关键字;固定写法 2) 条件语句——可以是任何有结果的表达式(比如:具体的数据、运算表达式、已经定义过的变量等,只有赋 值语句不行); 一般将结果是布尔的表达式作为条件 3) :——固定写法(注意输入法问题) 4) 代码段——结构上,就是和if保持一个缩进的一条或者多条语句(至少一条!!!!!); 逻辑上,就是满足条件才会执行代码。 执行过程:先判断条件语句是否成立(如果条件语句的结果不是布尔,就转换成布尔看是否是True),如果成立就执行代码段;条件不成立,代码段就不执行。 """ age = 18 if age >= 18: print('成年!') num = 230 if num % 2 == 0: print('偶数')
-
if双分支结构:如果xxx就xxx否则就xxx(条件成立执行某个操作,不成立就执行另外一个操作)
语法:
""" 语法: if 条件语句: 代码段1(满足条件执行的代码) else: 代码段2(不满足条件执行的代码) """
练习:
# 练习:根据age的值打印成年或者未成年 age = 29 if age < 18: print('未成年') else: print('成年') # 练习:根据year的值打印'闰年'或者'平年' year = 2004 if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): print('闰年') else: print('平年')
-
if多分支结构:如果xxx就xxx,如果xxx就xxx,如果xxx就xxx,…(根据不同的条件做不一样的事情)
- 方法1:直接多个单分支结构 (多个条件之间不存在“其中一个条件成立,另外的条件就不成立”的情况)
if 条件1:
代码段1
if 条件2:
代码段2
if 条件3:
代码段3
...
- 方法2:使用elif对应的对分支结果(多个条件之间存在“其中一个条件成立,另外的条件就不成立”的情况)
if 条件1:
代码段1
elif 条件2:
代码段2
elif 条件3:
代码段3
...
else:
代码段N
注意:方法2后面的条件是在前面的条件不成立的基础上进行判断的。如果前面的某个条件成立,后面的条件不会再判断
案例:
# 案例1:根据百分制分数,给学生打等级:A(大于等于90分)、B([80,90))、C([60,80))、D(小于60)
# 方法1:
score = 95
if score >= 90:
print('A')
if 80 <= score < 90:
print('B')
if 60 <= score < 80:
print('C')
if score < 60:
print('D')
# 方法2:
score = 95
if score >= 90:
print('A')
elif 80 <= score:
print('B')
elif 60 <= score:
print('C')
else:
print('D')
# 案例2:如果num是偶数打印偶数,如果num能被3整除打印3的倍数,如果num能被5整除打印5的倍数
num = 9
if num % 2 == 0:
print('偶数')
if num % 3 == 0:
print('3的倍数')
if num % 5 == 0:
print('5的倍数')
- if嵌套(if分支结构的内部又有分支结构)
案例:
# 案例:如果num是偶数就打印偶数,是奇数打印奇数,如果num能被4整除,打印'4的倍数'
# 3 -> 奇数
# 6 -> 偶数
# 8 -> 偶数、4的倍数
num = 6
if num % 2 == 0:
print('偶数')
if num % 4 == 0:
print('4的倍数')
print('====')
else:
print('奇数')
02for循环
-
循环结构:让代码重复执行(程序写一遍,重复执行多次)
python实现循环结构的工具:for循环、while循环
-
for循环
语法:for 变量 in 序列:
循环体
说明:
1)for:关键字,固定写法
2)变量:变量名(可以是已经定义过的变量的变量名也可以是没有定义过的变量的变量名)
3)in:关键字,固定写法
4)序列:必须是容器型数据类型的数据,例如:字符串、列表、字典、元组、集合、range、迭代器、生成器等
5)“:”:固定写法
6)循环体:结构上,循环体就是和for保持一个缩进的一条或者多条语句(至少一句)
逻辑上,就是需要重复执行的代码执行过程:让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。
(想要控制for循环的循环次数,只需要控制序列中元素的个数)
如:
for x in 'abc':
print('x:', x)
print('hello world!')
print(100)
print('------------------------------------华丽的分割线-----------------------------------')
for x in 'abc':
print('hello world!')
- range函数:创建等差数列
# 有三种格式:
'''
1) range(N) - 产生[0,N)的等差数列,差是1
例如:range(5) - 0,1,2,3,4
range(6) - 0,1,2,3,4,5
2) range(M, N) - 产生[M,N)的等差数列,差是1
例如: range(5, 10) - 5、6、7、8、9
3) range(M, N, step) - 产生[M,N)的等差数列,差是step
例如:range(10, 20, 2) - 10,12,14,16,18
range(9, 0, -2) - 9, 7, 5, 3,1
'''
03 for的应用
-
累计求和:
求和套路: 1)准备数据
2)定义变量保存最后的和(变量的默认值是0)
3)通过循环依次获取求和对象,得到一个求和对象就往保存和的变量中加一个
练习:
# 计算1+2+3+...+100的和
sum1 = 0 # 1+2=3+3=6+4=10
for x in range(1, 101):
sum1 += x # sum1 = sum1 + x
print(sum1)
# 求scores的和
scores = [28, 34, 78, 90, 89, 96, 76, 99]
sum1 = 0
for x in scores:
sum1 += x
print(sum1)
# 练习1:求2+3+4+...+50的和
sum1 = 0
for x in range(2, 51):
sum1 += x
print(sum1)
# 练习2:求3+6+9+12+...+99的和
sum1 = 0
for x in range(3, 100, 3):
sum1 += x
print(sum1)
# 练习3:求100以内所有偶数的和
# 0+2+4+6+...+98
sum1 = 0
for x in range(0, 100, 2):
sum1 += x
print(sum1)
# 练习4:求100以内所有能被3整除但是不能被5整除的数的和
# 3+6+9+12+18+21+24+27+...+99
# 方法1:
sum1 = 0
for x in range(100):
if x % 3 == 0 and x % 5 != 0:
sum1 += x
print(sum1)
# 方法2:
# 3,6, 9, 12, 15, 18, ... , 99
sum1 = 0
for x in range(3, 100, 3):
if x % 5 != 0:
sum1 += x
print(sum1)
# 练习5:已知列表list1,求列表中所有数字的和
list1 = [10, 1.23, 'abc', True, 20, 'mn', None]
sum1 = 0
for x in list1:
if type(x) == int or type(x) == float:
sum1 += x
print(sum1)
-
统计个数
1)定义变量保存最后的个数(变量默认值是0)
2)通过循环获取每一个统计对象,获取到一个统计对象,个数就在原来的基础上加1
练习:
# 案例1:统计100以内偶数的个数
count = 0
for x in range(0, 100, 2):
count += 1
print(count)
# 案例2:统计nums中偶数的个数
nums = [21, 23, 44, 89, 70, 66, 55]
count = 0
for x in nums:
if x % 2 == 0:
count += 1
print(count)
# 练习1:统计scores中不及格学生的人数
scores = [99, 80, 67, 55, 40, 81, 72, 51]
count = 0
for x in scores:
if x < 60:
count += 1
print(count)
# 练习2:统计nums中个位数大于5的数的个数
nums = [21, 23, 44, 89, 70, 66, 55]
count = 0
for x in nums:
if x % 10 > 5:
count += 1
print(count)
04while循环
-
while循环
语法:
""" 语法: while 条件语句: 循环体(需要重复执行的代码) 其他代码 执行过程:不断判断条件语句是否为True,如果是就执行循环体,如果不是循环直接结束。 (控制次数的方式:保证条件一开始是True,经历过指定次数以后条件会由True变成False) 死循环 - 条件语句一直都是True """
例:
# 打印0、1、2、3、4、5、...、100
num = 0
while num <= 100:
print(num)
num += 1
-
for循环和while循环的选择:
1)如果循环次数确定使用for循环;如果循环次数不确定,使用while循环。
2)循环次数不确定使用while循环,程序员在写代码的时候无法确定(确认)这个循环会重复多少次(次数由使用程序的用户决定的)
"""
提示用户输入密码,直到输入正确为止:
156324
请输入密码(6位):726162
请输入密码(6位):615252
请输入密码(6位):192822
....
请输入密码(6位):156324
"""
pw = '156234'
value = None
while value != pw:
value = input('请输入密码(6位):')
"""
while True:
需要重执行代码
if 循环结束条件:
break
"""
基础题
-
根据输入的成绩的范围打印
及格
或者不及格
。score = int(input('请输入你的成绩:')) if score < 60: print('不及格') else: print('及格')
-
根据输入的年纪范围打印
成年
或者未成年
,如果年龄不在正常范围内(0~150)打印这不是人!
。age = int(input('请输入你的年纪:')) if 18 <= age <= 150: print('成年') elif 0 < age < 18: print('未成年') else: print('这不是人!')
-
输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息
a-b的结果不是奇数
a = int(input('a=')) b = int(input('b=')) c = a-b if c % 2 != 0: print(c) else: print('a-b的结果不是奇数')
-
使用for循环输出 0~100内所有3的倍数。
for x in range(100): if x % 3 == 0: print(x)
-
使用for循环输出100~200内个位数或者十位数能被3整除的数。
for x in range(100, 201): ge = x % 10 shi = x // 10 % 10 if ge % 3 == 0: print(x) elif shi % 3 == 0: print(x)
-
使用for循环统计100~200中十位数是5的数的个数
count = 0 for x in range(100,201): shi = x // 10 % 10 if shi == 5: count += 1 print(count)
-
使用for循环打印50~150中所有能被3整除但是不能被5整除的数
for x in range(50, 151): if x % 3 == 0 and x % 5 != 0: print(x)
-
使用for循环计算50~150中所有能被3整除但是不能被5整除的数的和
sum1 = 0 for x in range(50,151): 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)
进阶题
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。 -
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)