循环
循环:让代码重复执行(代码写一遍,运行时执行多次)
一、for循环
语法:
for 变量 in 序列:
循环体
说明:
for、in: 关键字,固定写法
变量: 变量名(定没定义都可以)
序列: 容器型数据类型对应的数据,常见:字符串,列表,字典,元祖,集合,迭代器,range等
: : 固定写法
循环体 : 和for保持一个缩进的一条和多条语句
range函数
产生指定范围的数字序列
-
range(N): 产生【0,N)的数字序列,其中步长是1
-
range(M,N):产生【M,N)的数字序列,步长为1
-
range(M,N,step):产生【M,N)的数字序列,步长为step指定的值
-
print('======用法1:产生0开始步长为1的数字序列======') num = 10 for x in range(num): print(x)
-
print('=======用法2:直接的控制循环次数========= ') for x in range(4): print('hello!')
-
print('=====================================') for x in range(10, 20): print(x)
-
print('=====================================') for x in range(10, 20, 2): print(x)
-
二、while循环
语法:
while 条件语句:
循环体
说明:
while: 关键字;固定写法
条件语句: 任何有结果的表达式(只有赋值语句不行)
: 固定写法
循环体: 和while保持一个缩进的一条或者多条语句;需要重复执行代码
执行过程:
先判断条件语句是否为True,如果为True就执行循环体,执行完循环体再判断条件是否为True, 如果为True就再执行循环体
...以此类推,当条件语句结果为False循环直接结束。
- while循环控制循环次数的原则:让条件经历过指定次数后由True变成False
三、for和while的选择
- for循环:循环次数确定的时候使用
- while循环:循环次数不确定的时候使用 (程序员在写代码的时候没有办法通过任何方式来确定循环次数)
四、continue和break
-
1.continue和break只能出现在循环体中
- continue - 结束一次循环/结束当次循环
如果在执行循环体的时候遇到了continue,那么当次循环结束,直接进入下一次循环 - break - 结束整个循环
如果在执行循环体的时候遇到了break,整个循环直接结束
- continue - 结束一次循环/结束当次循环
-
例
-
for x in range(10): if x == 5 or x == 8: continue print(x)
-
for x in range(10): print(x) if x == 3: break
-
-
2.有了break的while循环
-
while True: 需要重复执行的操作 if 循环结束的条件: break
-
while True: value = input('请输入:') if value == '0': break
-
-
3.else
-
完整的for循环: for 变量 in 序列: 循环体 else: 代码段 完整的while循环: while 条件语句: 循环体 else: 代码段
-
else结构的存在不影响原来循环的执行,
当循环自然死亡else后面的代码段会执行,如果循环是因为遇到break而结束的else后面的代码段不执行 -
for x in range(4): print(x, '=====') if x == 2: break else: print('else')
-
作业
基础题
-
使用for和while循环输出 0~100内所有3的倍数。
for x in range(0, 101, 3): if x != 0: print(x) num = 0 while True: print(num) num += 3 if num >= 100: break
-
使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
for x in range(100, 201): if (x % 10 % 3 == 0 and x % 10 != 0) or (x // 10 % 10 % 3 == 0 and x // 10 % 10 != 0): print(x) num = 100 while True: if(x % 10 % 3 == 0 and x % 10 != 0) or (x // 10 % 10 % 3 == 0 and x // 10 % 10 != 0): print(num) num +=1 if num > 200: break
-
统计100~200中十位数是5的数的个数
count = 0 for x in range(100, 201): if x % 100 // 10 % 5 == 0: count += 1 print(count)
-
打印50~150中所有能被3整除但是不能被5整除的数
for x in range(50, 151): if x % 3 == 0 and x % 5 != 0: print(x)
-
计算50~150中所有能被3整除但是不能被5整除的数的和
a = 0 for x in range(50, 151, 3): if x % 5 != 0: a += x print(a)
进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。a = 1 for x in range(1, 11): a *= x print(a)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count = 0 for x in range(0, 101): a = x % 10 == 2 b = x % 3 == 0 if a and b: count += 1 print(count)
-
输入任意一个正整数,求他是几位数?
num = int(input('请输入正整数:')) x = 1 while num // 10 != 0: x += 1 num // = 10 print(x, '位数')
注意: 这儿不能使用字符串,只能用循环
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是 一个仙花数,因为
1³ + 5³ + 3³
等于 153。for x in range(100, 1000): if (((x % 10) ** 3) + ((x // 10 % 10) ** 3) + ((x // 100) ** 3)) == x: print(x)
挑战题
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num = 31 for x in range(2, num): if num % x == 0: print('bushi') continue else: print('shi')
-
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
n = 12 pre1 = 1 pre2 = 1 if n == 1 or n == 2 print(1) else: for x in range(n-3): pre1, pre2 = pre2, pre2+pre1 print(pre1+pre2)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
# hang = y = 1~1+lie # lie = x = 1~9 for x in range(1,10) for y in range(1,x+1) print(x, 'x', y, '=', x * y, end='', sep='') print()
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for big in range(100 // 3 +1): for mid in range(50): sml = 100 - big - mid if big + mid + sml / 2 = 100: print(big, mid, sml)