循环 让代码重复执行(代码写一遍,运行的时候可以执行多次)
for循环
语法:
for 变量 in 序列:
循环体
说明:
for、in ( 关键字,固定写法)
变量 (写一个变量名(可以是已经定义过的,也可以没有定义过的))
序列 (容器型数据类型对应的数据,常见序列:字符串、列表、元组、字典、集合、迭代器、生成器、range)
: (固定写法)
循环体(和for保持一个缩进的一条或者多条语句;就是需要重复执行的代码)
执行过程:
让变量去序列中取值,一个一个的取,取完为止,每取一个执行一次循环体
for循环的循环次数和序列中元素的个数有关
for x in "123456": print(x, 'zzz') ''' 1 zzz 2 zzz 3 zzz 4 zzz 5 zzz 6 zzz '''
range函数
产生指定范围的数字序列
1) range(N) 产生【0,n)的数字序列,其中步长是1
用法1:产生0开始步长为1的数字序列
for x in range(10): print(x) ''' 0 1 2 3 4 5 6 7 8 9 '''
用法2:直接控制循环次数
for x in range(5): print('zzz') ''' zzz zzz zzz zzz zzz '''
2) range(M,N) 产生【M,N)的数字序列,步长1
for x in range(10, 20): print(x) ''' 10 11 12 13 14 15 16 17 18 19 '''
3) range(M,N,step) 产生【M,N)的数字序列,步长为step指定值
for x in range(10, 30, 3): print(x) ''' 10 13 16 19 22 25 28 '''
练习1:打印100以内所有偶数
# 方法1: for x in range(0, 100, 2): print(x) # 方法2: for x in range(100): if x % 2 == 0: print(x)
练习2:打印100~200中所有个位数是3的数
# 方法1: for x in range(103, 200, 10): print(x) # 方法2: for x in range(100, 200): if x % 10 == 3: print(x)
练习3:打印所有的水仙花数
for x in range(100, 1000): if ((x // 100) ** 3 + (x % 100 // 10) ** 3 + (x % 10) ** 3) == x: print(x) ''' 153 370 371 407 '''
1、统计100以内偶数的个数
i = 0 for x in range(0, 100, 2): i += 1 print('100以内偶数的个数', i) ''' 100以内偶数的个数 50 '''
2、统计100以内能被3整除的偶数的个数
# 方法1: i = 0 for x in range(0, 100, 3): if x % 2 == 0: i += 1 print('能被3整除的偶数的个数', i) # 方法2: i = 0 for x in range(0, 100, 6): i += 1 print('能被3整除的偶数的个数', i) ''' 能被3整除的偶数的个数 17 能被3整除的偶数的个数 17 '''
3、计算1+2+3+…+100的和
i = 0 for x in range(1, 101): i += x print('1+2+3+...+100的和', i) ''' 1+2+3+...+100的和 5050 '''
4、计算所有水仙花数的和
i = 0 for x in range(100, 1000): if ((x // 100) ** 3 + (x % 100 // 10) ** 3 + (x % 10) ** 3) == x: i += x print('所有水仙花数的和', i) ''' 所有水仙花数的和 1301 '''
while循环
语法:
while 条件语句:
循环体
说明:
while (关键字,固定写法)
条件语句 ( 任何有结果的表达式(只有赋值语句不行))
: (固定写法)
循环体 (和while保持一个缩进的一条或者多条语句,需要重复执行代码)
执行过程:
先判断条件语句是否为True,如果为True就执行循环体,执行完循环体再判断条件是否为Ture,如果为Ture就再执行循环体,…,以此类推,当条件语句结果为False循环直接结束。
while循环控制循环次数的原则:让条件经历过指定次数后由Ture变成False
i=0 while i<5: i+=1 print('hello') ''' hello hello hello hello hello '''
while和for的选择
1)for循环:循环次数确定时使用
2)while循环:循环次数不确定时使用(程序员写代码时没有办法获知循环次数)
练习:通过提示,让一个用户输入0,结束执行
i=int(input('请输入:')) while i!=0: i=int(input('请输入:')) ''' 请输入:9 请输入:8 请输入:7 请输入:0 '''
continue和break
continue和break只能出现在循环体内
1)continue (结束一次循环/结束当此循环)
如果在执行循环体的时候遇到了continue,当此循环结束,直接进入下次循环
2)break (结束整个循环)
如果在执行循环体的时候遇到了break,循环结束
for x in range(10): if x==8 or x==5: continue print(x) ''' 0 1 2 3 4 6 7 9 ''' for x in range(10): if x==8 or x==5: break print(x) ''' 0 1 2 3 4 '''
有了break的while循环
while Ture:
需要重复执行的操作
if 循环结束的条件:
break
while True: x = input('请输入') if x=='0': break ''' 请输入9 请输入8 请输入7 请输入0 '''
else
完整的for循环
for 变量 in序列:
循环体
else:
代码段
完整的while循环
while 条件语句:
循环体
else:
代码段
else结构的存在不影响原来的循环执行,当循环自然死亡else后面的代码段会执行,如果是因为遇到break结束,则else不执行
for x in range(4): print('11111',x) else: print('end') ''' 11111 0 11111 1 11111 2 11111 3 end ''' for x in range(4): print('11111',x) if x==2: break else: print('end') ''' 11111 0 11111 1 11111 2 '''
使用for和while循环输出 0~100内所有3的倍数。
# for for x in range(0,100,3): print(x) # while i = 0 while i < 100: print(i) i += 3
使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
# for for x in range(100, 200): if (x%10%3==0 or x//10%10%3==0): print(x) # while i = 100 while i < 200: if i % 10 % 3 == 0 or i // 10 % 10 % 3 == 0: print(i) i += 1
统计100~200中十位数是5的数的个数
i=0 for x in range(100, 200): if x//10%10/5==1: i += 1 print('100~200中十位数是5的数的个数',i) ''' 100~200中十位数是5的数的个数 10 '''
打印50~150中所有能被3整除但是不能被5整除的数
for x in range(50, 150): if x%3==0 and x%5!=0: print(x)
计算50~150中所有能被3整除但是不能被5整除的数的和
i=0 for x in range(50, 150): if x%3==0 and x%5!=0: i+=x print('50~150中所有能被3整除但是不能被5整除的数的和',i) ''' 50~150中所有能被3整除但是不能被5整除的数的和 2682 '''
使用循环计算1*2*3*4*...*10
的结果。
i = 1 for x in range(1, 11): i *= x print('1*2*3*4*...*10`的结果', i)
统计100以内个位数是2并且能够被3整除的数的个数。
i = 0 for x in range(100): if x%10/2==1 and x%3==0: i+=1 print('100以内个位数是2并且能够被3整除的数的个数', i) ''' 100以内个位数是2并且能够被3整除的数的个数 3 '''
输入任意一个正整数,求他是几位数?注意: 这儿不能使用字符串,只能用循环
x = int(input('输入任意一个正整数')) n = 0 while x!=0: x //=10 n += 1 print(n)
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是 ⼀个⽔仙花数,因为 1³ + 5³ + 3³
等于 153。
for x in range(100, 1000): if ((x // 100) ** 3 + (x % 100 // 10) ** 3 + (x % 10) ** 3) == x: print(x) ''' 153 370 371 407 '''
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 11 # 方法1 for x in range(2, num): if num % x == 0: print('不是素数') break else: print('是素数') # 方法2 for x in range(2,int(num**0.5)+1): if num % x == 0: print('不是素数') break else: print('是素数')
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
a = 1 b = 1 n = int(input("输入")) if n == 1 or n == 2: print(1) else: for x in range(n - 3): a, b = b, a + b print(a + b)
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1,10): for j in range(1,i+1): print(i,'*',j,'=',i * j,end=' ') print('') ''' 1 * 1 = 1 2 * 1 = 2 2 * 2 = 4 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 '''
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for x in range(1, 34): for y in range(1, 51): for z in range(100): if 3 * x + 2 * y + z / 2 == 100 and x + y + z == 100: print("大马有", x, "中马有", y, "小马有", z) ''' 大马有 2 中马有 30 小马有 68 大马有 5 中马有 25 小马有 70 大马有 8 中马有 20 小马有 72 大马有 11 中马有 15 小马有 74 大马有 14 中马有 10 小马有 76 大马有 17 中马有 5 小马有 78 '''