分支与循环
分支
if多分支
根据不同的条件做不一样的事情,但是要求条件之间存在:其中某一个条件成立了,另外的其他条件一定不会成立
语法:
if 条件语句1:
代码段1
elif 条件语句2:
代码段2
elif 条件语句3:
代码段3
…
else:
代码段N
if score >= 90:
print('A')
elif score >= 80:
print('B')
elif score >= 60:
print('C')
else:
print('D')
if嵌套
num = 20
if num % 2 == 0:
print('偶数')
if num % 4 == 0:
print('4的倍数')
else:
print('奇数')
循环
for
语法:
for 变量 in 序列:
循环体
说明:
1)for、in - 关键字;固定写法
2)变量 - 变量名
3)序列 - 容器型数据类型的数据,例如:字符串、列表、字典、元组、集合、迭代器、生成器、range等
4)循环体 - 和for保持一个缩进的一条或者多条语句;循环体就是需要重复执行的代码
执行过程:
让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。(序列中元素的个数决定了循环的次数)
for x in 'abc=-':
print('+++', x)
range函数 - 产生一个指定范围的数字序列
range(N) - 产生[0,N)的数字序列, N必须大于0,每次数字增加1
for x in range(5):
print('x1:', x)
range(M,N) - 产生[M,N)的数字序列,M < N, 每次数字增加1
for x in range(-10, 10):
print('x2:', x)
range(M,N,step) - 产生[M,N)的数字序列,每次数字增加step
for x in range(1, 10, 2):
print('x3:', x)
while
语法:
while 条件语句:
循环体
说明:
1)while - 关键字;固定写法
2)条件语句 - 任何有结果的表达式
3)循环体 - 和while保持一个缩进的一条或者多条语句;循环体就是需要重复执行的代码段
执行过程:
先判断条件语句是否为True,为True就执行循环体,执行完再判断条件语句是否为True,为True就执行循环体,…
以此类推,直到判断条件语句的时候结果为False,整个循环就结束。
num = 1
while num < 101:
print(num)
num += 1
for循环和while循环的选择
当循环次数不确定的时候使用while循环,否则使用for循环
from random import randint
num = randint(0, 99) # 产生0到99的随机整数并且保存到变量num中
i_num = int(input('请输入数字(0~99):'))
while i_num != num:
if i_num > num:
print('大了,再小点儿')
else:
print('小了,再小点儿')
i_num = int(input('请输入数字(0~99):'))
print('恭喜你!猜对了')
循环关键字
1.continue和break
continue和break只能在循环体中使用
continue: 结束一次循环(当执行循环体的时候遇到continue,当次循环结束,直接进入下次循环的判断)
break:结束整个循环(当执行循环体的时候遇到break,整个循环直接结束)
# continue
for x in range(5):
if x % 2:
continue
print(x)
# break
pw = '123456'
while True:
i_pw = input('请输入密码:')
if i_pw == pw:
break
2.else
python中完整的for循环和while循环后面都有else结构,else结构的存在不影响原循环的执行。
for 变量 in 序列:
循环体
else:
代码段
while 条件语句:
循环体
else:
代码段
当循环是因为遇到break而结束的,那么循环后面else里面的代码不会执行。
循环结束的时候不是因为遇到break,那么else后面的代码段会执行
for x in range(5):
print(x)
if x == 3:
break
else:
print('else中的代码')
作业
基础题
-
根据输入的成绩的范围打印
及格
或者不及格
。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:')) if (a-b) % 2 == 1: print(a-b) else: print('a-b的结果不是奇数')
-
使用for和while循环输出 0~100内所有3的倍数。
for x in range(0, 100, 3): print(x) i = 0 while i < 100: print(i) i += 3
-
使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
for x in range(100, 201): if x % 10 % 3 == 0 or x // 10 % 10 % 3==0: print(x) i = 100 while i < 201: if i % 10 % 3 == 0 or i // 10 % 10 % 3 == 0: print(i) i += 1
进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。result = 1 for x in range(1, 11): result *= x print(result)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count = 0 for x in range(2, 100, 10): if x % 3 == 0: count += 1 print(count)
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
count = 1 num =int(input('请输入一个数:')) while num // 10 > 0: count += 1 num //= 10 print('他是', count, '位数')
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for x in range(100,1000): ge = x % 10 shi = x // 10 % 10 bai = x // 100 if x == ge ** 3 + shi ** 3 + bai ** 3: print(x)
挑战题
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 7 for x in range(2, num): if num % x == 0: print(num, '不是素数') break else: print(num,'是素数')
-
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
num1 = 0 num2 = 1 num = 1 in_p = int(input("请输入一个数:")) if in_p == 1: print(1) else: for x in range(1, in_p): num = num1 + num2 num1 = num2 num2 = num print(num)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(10): for j in range(10): print(i, '*', j,'=',i*j,sep='',end=' ') if j == 9: print('')
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for big in range(34): for medum in range(51): for small in range(0, 101, 2): if 100 == big + medum + small and 100 == 3 * big + 2 * medum + small/2: print('大马', big, '匹,','中马', medum, '匹,','小马', small, '匹',sep='')