Python 循环
for
-
语法
for 变量 in 序列: 循环体
-
说明
- for, in - 关键字,固定写法
- 变量 - 可以是已定义的变量,也可以是没有定义的变量,建议使用没有定义的变量
- 序列 - Python中的容器型数据类型,常见的容器型数据类型:列表、字典、集合、元组、字符串。至今为止,暂时只接触了字符串,后续学习继续补充
- : - 固定写法
- 循环体 - 与for保持一个缩进,参与循环执行的代码内容
-
执行过程
我们可以看作变量是自己,序列就是一筐篮球,循环体就是起手、投篮、落手的动作。每次投球,变量在序列里一次取球,然后完成起手、投篮、落手的动作。
for 我 in 一筐篮球: 起手 投篮 落手
for i in 'JerryHM11': print(i, 'hello world') """ i = 'J': print(x, 'hello world!') -> print('J', 'hello world') i = 'e': print(x, 'hello world!') -> print('e', 'hello world') ... i = '1': print(x, 'hello world!') -> print('1', 'hello world') """ [Out] J hello world e hello world r hello world r hello world y hello world H hello world M hello world 1 hello world 1 hello world
将该循环过程看作投篮过程,可以有助于我们的理解。
-
range() - 用于产生你指定范围的数值序列
- range(M) - 产生一个[0, M)的数值序列,步长为1
- range(M, N) - 产生一个[M, N)的数值序列,其中N > M,步长为1
- range(M, N, step) - 产生一个[M, N)的数值序列,其中步长为step
# 打印出100~200以内的所有个位数为3的数 # ---- 方法1 ---- # for i in range(100, 200): if i % 10 == 3: print(i, end=' ') [Out] 103 113 123 133 143 153 163 173 183 193 # ---- 方法2 ----# for i in range(103, 200, 10): print(i, end=' ') [Out] 103 113 123 133 143 153 163 173 183 193
while
-
语法
while 条件语句: 循环体
-
说明
- while - 关键字,固定写法
- 条件语句 - 循环过程中参与判断是否进行后续循环的条件代码
- : - 固定写法
- 循环体 - 与while保持一个缩进,参与循环执行的代码内容
-
执行过程
程序运行至while循环时,判断条件语句是否为True,若为,则执行循环体中的内容,执行完毕后,再回到while循环中,进行判断是否进入循环中,否则,则跳出循环,结束循环操作。
# 请输入一个值,当值为0时,跳出循环,否则一直输入 value = input('请输入:') while value != '0': value = input('请输入:')
循环关键字
continue
- 功能:结束一次循环/结束当前循环
如果执行循环体的时候遇到了continue,那么当次循环直接结束,直接进入下一次循环
for x in range(4):
print('====')
continue
print('++++')
print('----')
[Out]
====
====
====
====
break
- 功能:break - 结束整个循环
如果在执行循环过程中遇到break,整个循环直接结束
for i in range(4):
print('====')
break
print('++++')
print('----')
[Out]
====
else
- 功能:else结构的存在不影响原来循环的执行
当循环自然死亡,else后的代码段会执行;
如果循环遇到break结束,代码段不执行。
for i in range(4):
print(i, '====')
if i == 2:
break
else:
print('else')
[Out]
0 ====
1 ====
练习
基础题
-
使用for和while循环输出 0~100内所有3的倍数。
# for for i in range(0, 100, 3): print(i, end=' ') print('\n') # while num = 0 while num <= 100: print(num, end=' ') num += 3
-
使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
# for for i in range(100, 200): if i % 10 % 3 == 0 or i // 10 % 10 % 3 == 0: print(i, end=' ') print('\n') # while num = 100 while num < 200: if num % 10 % 3 == 0 or num // 10 % 10 % 3 == 0: print(num, end=' ') num += 1
-
统计100~200中十位数是5的数的个数
num = 0 for i in range(150, 160): num += 1 print('100~200中十位数是5的数的个数为:', num, sep='')
-
打印50~150中所有能被3整除但是不能被5整除的数
for i in range(51, 150, 3): if i % 5 != 0: print(i, end=' ')
-
计算50~150中所有能被3整除但是不能被5整除的数的和
sum_num = 0 for i in range(51, 150, 3): if i % 5 != 0: sum_num += i print('和为:', sum_num, sep='')
进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。product = 1 for i in range(1, 11): product *= i print(product)
-
统计100以内个位数是2并且能够被3整除的数的个数。
sum_num = 0 for i in range(2, 100, 10): if i % 3 == 0: sum_num += 1 print('个数为:', sum_num,sep='')
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
x = int(input('请输入数字:')) order = 1 # 位数 while True: if x // (10 ** order) != 0: order += 1 else: break print('这个数是{}位数'.format(order))
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for i in range(100, 1000): if (i % 10) ** 3 + (i // 10 % 10) ** 3 + (i // 100) ** 3 == i: print(i, end=' ')
挑战题
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
x = 13 if x == 1: print(x, '既不是素数也不是合数', sep='') elif x== 2: print(x, '是素数', sep='') else: for i in range(2, x): if x % i == 0: print(x, '不是素数', sep='') break else: print(x, '是素数', sep='')
-
求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
n = 5 if n == 1 or n == 2: print('斐波那契数列中第{0}个数的值为:{1}'.format(n, 1)) else: num1 = 1; num2 = 1 for i in range(n - 2): num = num1 num1 = num2 num2 = num + num2 print('斐波那契数列中第{0}个数的值为:{1}'.format(n, num2))
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1, 10): for j in range(1, 10): print('{0}x{1}={2}\t'.format(i, j, i*j), end=' ') print('')
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for i in range(33): # 大马最多33匹 for j in range(50): # 中马最多50匹 if 3 * i + 2 * j + 0.5 * (100 - i - j) == 100: print('大马{0}匹,中马{1}匹,小马{2}匹'.format(i, j, 100 - i - j))