一、分支结构
Python实现分支结构的工具只有:if
1.单分支结构
1)应用场景:如果xxx就xxx(满足条件才执行某个操作,如果这个条件不满足这个操作就不执行)
2)语法:
if 条件语句:
代码段
3)说明:
a.if - 关键字,固定写法
b.条件语句 - 判断语句(可以是任何有结果的表达式)
c.: - 固定写法(注意:必须是英文输入法的冒火)
d.代码段 - 结果上是和if保持一个缩进的一条或多条语句(至少一条)
逻辑上代码段就是 满足条件才会执行的代码
案例1:如果age大于等于18就打印成年
age = 18
if age >= 18:
print('成年')
else:
print('未成年')
案例2:如果year对应的是闰年,就打印’闰年‘
year = 1990
if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:
print('是闰年')
else:
print('不是闰年')
练习1:根据num的值打印’偶数‘
num1 = 20
if num1 % 2 == 0:
print('是偶数')
练习2:如果num不能被3整除就让num加1
num2 = 20
if num2 % 3 !=0:
num2 += 1
print(num2)
2.双分支结构
1)应用场景:如果xxx就xxx否则就xxx(满足条件执行某操作,条件不满足的时候执行另外的操作)
2)语法:
if 条件语句:
代码段1
else:
代码段2
案例:如果age大于等于18就打印成年,否则打印’未成年‘
age = 33
if age >= 18:
print('成年')
else:
print('未成年')
3.多分支结构
1)应用场景:如果xxx就xxx,如果xxx就xxx,如果xxx就xxx,…(根据不同的条件做不同的事情)
2)语法1:
if 条件语句:
代码段
if 条件语句:
代码段
if 条件语句:
代码段
…
语法2: - 多个条件之间存在:其中一个条件成立,其它条件一定不成立的关系
if 条件语句1:
代码段1
elif 条件语句2:
代码段2
elif 条件语句3:
代码段3
…
elif 条件语句N:
代码段N
案例:根据年龄值打印:幼儿(0-3)、儿童(3-12)、青少年(13-18)、青年(19-28)、壮年(29-39)、中年(40-65)、老年(>65)
age = 88
方法1:
print('方法1---------------------')
if 0 <= 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 65 < age:
print('老年')
方法2:
print('方法2---------------------')
if 0 <= 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('老年')
练习:根据分数打等级:A(>=90)、B[80-90)、C[60-80)、D(<60)
score = int(input('请输入你的分数:'))
if score >= 90:
print('A')
elif score >= 80:
print('B')
elif score >= 60:
print('C')
else:
print('D')
二、for循环
循环:代码只写一遍,然后反复执行多次
1.for循环
1)语法:
for 变量 in 序列:
循环体
2)说明:
a.for - 关键字,固定写法
b.变量 - 变量名(已经定义过的,或没有定义过的变量都可以)
c.in - 关键字,固定写法
d.序列 - 可以是任何容器型数据类型的数据,如:字符串、列表、元组、字典、集合、迭代器、生成器、range
e.: - 固定写法
f.循环体 - 结构上循环体就是和for保持一个缩进的一条或多条语句(至少一句)
逻辑上循环体就是需要重复执行的代码
3)执行过程:
让变量去序列中取值,一个一个的取,取完为止;每取一个值就执行一次循环体
如果要控制for循环的循环次数,只需要控制序列中元素的个数
举例:
for x in '12345':
print('Hello Word!: %s' %x)
思考:控制’helle word!'打印100遍怎么办?
2.range函数(for循环的灵魂伴侣) - 创建等差数列的函数
1)range(N) - 产生[0,N)的等差数列,差是1;range(5),0 1 2 3 4
2)range(M,N) - 产生[M,N)的等差数列,差是1;range(5,10):5 6 7 8 9
2)range(M,N,step) - 产生[M,N)的等差数列,差是step;range(1,10,2):1 3 5 7 9
range(6,1,-1):6 5 4 3 2
注:M:对应等差数列的首项,默认是0
N:对应等差数列的尾项(但是和尾项不相等)
step:差,默认是1
print('---------------------')
for x in range(100):
print('Hello Word! %s' % x)
print('---------------------')
for x in range(5,10):
print('Hello Word! %s' % x)
print('---------------------')
for x in range(6,1,-1):
print('Hello Word! %s' % x)
练习1:使用range创建等差数列:0 1 2 3 4 5 6 7
print('练习1---------------------')
for x in range(8):
print('Hello Word! %s' % x)
练习2:使用range创建等差数列:0 10 20 30 40
print('练习2---------------------')
for x in range(0,50,10):
print('Hello Word! %s' % x)
练习3:使用range创建等差数列:5 10 15 20 25
print('练习3---------------------')
for x in range(5,30,5):
print('Hello Word! %s' % x)
练习4:使用range创建等差数列:25 20 15 10 5
print('练习4---------------------')
for x in range(25,0,-5):
print('Hello Word! %s' % x)
练习5:使用range创建等差数列:-1 0 1 2
print('练习5---------------------')
for x in range(-1,3,1):
print('Hello Word! %s' % x)
三、for循环的应用
1.累积求和
1)定义变量保存最后的和,变量的默认值是0
2)用循环依次获取所有需要求和的数据
3)在循环体中获取一个需要求和的数据就用最后保存的变量加上这个数据
案例1:用循环求1+2+3+…+100的和
print('案例1----------------------')
sum = 0
for x in range(101):
sum += x
print(sum)
案例2:求scores中所有分数的和
print('案例2----------------------')
scores = [98, 33, 44, 56, 78, 98, 100, 51, 55, 60]
all_scores = 0
for x in scores:
all_scores += x
print(all_scores)
练习1:计算1+3+5+7+…+99
print('练习1----------------------')
sum = 0
for x in range(1,100,2):
sum += x
print(sum)
练习2:求scres所有及格学生的总分
print('练习2----------------------')
scores = [98, 33, 44, 56, 78, 98, 100, 51, 55, 60]
all_scores = 0
for i in scores:
if i >= 60:
all_scores += i
print(all_scores)
练习3:求100以内中所有能被3整除但不能被2整除的数的和
方法1
print('练习3----------------------方法1')
sum = 0
for x in range(0,100):
if x % 3 == 0 and x % 2 != 0:
sum += x
print(sum)
方法2:循环次数减少
print('练习3----------------------方法2')
sum = 0
for x in range(0,100,3):
if x % 2 != 0:
sum += x
print(sum)
2.统计个数
1)定义变量保存最后的个数,默认值0
2)通过循环获取统计对象
3)获得一个统计对象个数就加1
案例1:统计不及格学生的人数
print('案例1----------------------')
scores = [98, 33, 44, 56, 78, 98, 100, 51, 55, 60]
count = 0
for x in scores:
if x < 60:
count += 1
print(count)
练习1:统计1000以内能被3整除的数的个数(不包括0)
print('练习1----------------------方法1')
count = 0
for x in range(1,1000):
if x % 3 == 0:
count += 1
print(count)
print('练习1----------------------方法2')
count = 0
for x in range(3, 1000, 3):
count += 1
print(count)
四、while循环
1.while循环
1)语法:
while 条件语句:
代码段(循环体)
2)执行过程:先判断条件语句是否成立,如果成立就执行循环体,执行完循环再判断条件语句是否成立,成立就再执行循环体…以此类推,直到条件不成立循环结束。
例1:打印1、2、3、4、…、10
num = 1
while num <= 10:
print(num)
num += 1
例2:打印10个’hello world!’
x = 0
while x < 10:
print('Hello Word!', x)
x += 1
2.for循环和while循环的选择
1)原则:能用for循环的时候尽量用for循环,for循环解决不了的问题才考虑使用while循环
2)for循环能够解决的问题:a.循环次数确定的时候
3)for循环不能解决的问题:a.死循环
b.循环次数不确定(用户行为决定或程序员无法确定循环次数的时候)
案例1:写程序提示用户输入密码直到密码输入正确为止
print('案例1----------------------')
pw = '123abc'
use_pw = input('请输入密码:')
while use_pw != pw:
print('密码错误,请重新输入')
use_pw = input('请输入密码:')
print('密码正确')
3.有了break的while循环:
while True:
需要重复执行的操作
if 循环结束的条件:
break
print('案例2----------------------')
pw = '123abc'
while True:
print('密码错误,请重新输入')
use_pw = input('请输入密码:')
if use_pw == pw:
break
print('密码正确!')
五、循环关键字
循环关键字continue、break
continue和break只能在循环体中使用
1.continue
作用:结束一次循环(结束当次循环) - 执行循环体的时候如果遇到continue,那么这次循环直接结束
案例1:打印10以内的所有奇数
print('案例1-------------方法1')
for x in range(10):
if x % 2 == 0:
continue
print(x)
print('案例1-------------方法2')
for x in range(10):
if x % 2 != 0:
print(x)
2.break
作用:结束整个循环 - 执行循环体的时候如果遇到break整个循环结束
案例2:
print('案例2-------------')
for i in range(10):
if i > 4:
break
print(i)
六、分支作业题
1.写出判断⼀个数是否能同时被2和5整除的条件语句, 并且打印对应的结果。
num = 99
if num % 2 == 0 and num % 5 == 0:
print('该num能同时被2和5整除')
else:
print('该num不能同时被2和5整除')
2.写出判断⼀个数是否能够被2或者5整除,但是不能同时被2或者5整除的条件语句, 并且打印对应。
num = 14
if num % 2 == 0 or num % 5 == 0:
if (num % 2 == 0 and num % 5 == 0) == False:
print('该num能被2或5整除但不能同时被2或5整除')
else:
print('该num能被2或5整除且能同时被2或5整除')
3.假设今天的上课时间为15678秒,编程计算今天上课时间是多少⼩时,多少分钟,多少秒;以‘XX时XX分XX秒’的⽅式表示出来。
例:100秒表示成0时1分40秒
allTime = 15678
h = allTime // 3600
m = allTime % 3600 // 60
s = allTime % 60
print('%s时%s分%s秒' % (h, m, s))
4.定义两个变量保存⼀个⼈的身⾼和体重,编程实现判断这个⼈的身材是否正常!
公式:体重(kg) / (身⾼(m)的平⽅值) 在18.5 ~ 24.9之间属于正常。
输出格式:是否正常:True / False
height = 172
weight = 65
if 18.5 <= weight / (height ** 2) <= 24.9:
print('身材正常')
else:
print('不正常')
5.写程序判断指定的整数(num)是否是水仙花数。
水仙花:一个三位,其各个位数的立方和等于这个数本身,比如:153是水仙花数,因为1^3 + 5^3 + 3^3 等于153
num1 = int(input('请输入一个三位数:'))
num2 = num1 % 1000 // 100
num3 = num1 % 100 // 10
num4 = num1 % 10
if num2**3 + num3**3 + num4**3 == num1:
print('该三位数是水仙花数')
else:
print('该三位数不是水仙花数')
七、分支和循环的综合应用
A、基础题
1.根据输入的成绩的范围打印及格
或者不及格
。
score = int(input('请输入你的成绩:'))
if score >= 60:
print('及格')
else:
print('不及格')
2.根据输入的年纪范围打印成年
或者未成年
,如果年龄不在正常范围内(0~150)打印这不是人!
。
设:未成年(0-17)、成年人(18-150)、不是人(<0 or >150)
age = int(input('请输入你的年龄:'))
if 0 <= age <= 17:
print('未成年')
elif 18 <= age <= 150:
print('成年人')
else:
print('不是人!')
3.输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息a-b的结果不是奇数
。
a = int(input('请输入整数a:'))
b = int(input('请输入整数b:'))
c = a - b
if c % 2 == 1:
print(c)
else:
print('a-b的结果不是奇数')
4.使用while循环输出0~100内所有3的倍数。
x = 0
while x <= 100:
if x % 3 == 0:
print(x)
x += 1
5.使用while循环输出0~100内所有的偶数。
x = 0
while x <= 100:
if x % 2 == 0:
print(x)
x += 1
B、进阶题
1.使用循环计算1*2*3*4*...*10
的结果。
print('进阶1-------------------------')
sum = 1
for x in range(1,11):
sum *= x
print(sum)
2.统计100以内个位数是2并且能够被3整除的数的个数。
print('进阶2-------------------------')
count = 0
for x in range(0,101):
if x % 10 == 2 and x % 3 == 0:
count += 1
print(count)
3.输入任意一个正整数,求他是几位数?
print('进阶3-------------------------')
x = int(input('请输入一个正整数:'))
count = 0
while x != 0:
x //= 10
count += 1
print(count)
C.挑战题
1.判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 4
for x in range(2,num):
if num % x == 0:
print(num,'不是素数')
break
else:
print(num,'是素数')
2.求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
n = int(input('请输入一个正整数:'))
num1 = 1
num2 = 1
for x in range(n - 2):
num = num2
num2 = num1 + num
num1 = num
print('斐波那契数列列中第', n,'个数的值是:', num2)
3.输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列
for i in range(1,10):
for j in range(1,i + 1):
print(j, '*', i, '=',j * i, end = '\t', sep = '')
print('\t')
4.这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
大马3担
中马2担
小马0.5担
for x in range(0,34):
for y in range(0,51):
if x * 3 + y * 2 + (100 - x - y )*0.5 == 100:
print('大马有:', x, '匹;','中马有:', y, '匹;', '小马有:', 100 - x - y , '匹')