循环结构
循环
循环:让代码重复执行(代码写一遍,可以运行多次)。
for 循环
1)语法:
for 变量 in 序列:
循环体
2)说明:
for、in - 关键字、固定写法
变量 - 写一个变量,可以是定义过的,也可以是不曾定义的
序列 - python中的容器型数据类型对应的数据
常见序列:字符串、列表、元组、字典、集合、迭代器、生成器、range等。
数据值不是序列
: - 缩进
循环体 - 和for保持一个缩进的一条或者多条语句(需要重复执行的代码)
3)执行过程:
让变量在序列中一个一个地取值直至取完,每取一个值执行一个循环体。for循环的执行次数与序列中的元素个数有关。
for x in 'abc':
x=a,print(x,'hello')
print(x,'hello') # 字符串里有3个符号 -> 循环3次
'''
x=a,print(x,'hello')
x=b,print(x,'hello')
x=c,print(x,'hello')
'''
range函数
range函数:产生指定范围的数字序列
语法:
1) range(N) - 产生[0,N)的数字序列,其中步长是1
for x in range(10):
print(x)
2) range(M,N) - 产生[M,N)的数字序列,其中步长是1
for x in range(10,20):
print(x)
for x in range(-10,10):
print(x)
3) range(M,N,step) - 产生[M,N)的数字序列,其中步长是step的指定值
for x in range(10,20,2):
print(x)
for x in range(20,0,-2):
print(x)
练习1: 打印100以内所有的偶数
# 法一:
for x in range(100):
if x%2==0:
print(x)
# 法二
for x in range(0,100,2):
print(x)
练习2: 打印100~200中所有个位数是3的数
# 法一:
for x in range(100,200):
if x%10==3:
print(x)
# 法二
for x in range(103,200,10):
print(x)
练习3: 打印所有的水仙花数
for x in range(100,1000):
if (x//100)**3+(x%100//10)**3+(x%10)**3==x:
print(x)
两个套路
统计套路
count=0 # 利用变量count累计次数
练习1:统计100以内偶数的个数
count=0
for x in range(100):
if x%2==0:
count+=1
print(count)
练习2:统计100以内能被3整除的偶数的个数
# 法一
count=0
for x in range(0,100):
if (x%3==0) and (x%2==0): # x%6==0
count+=1
print(count)
# 法二
count=0
for x in range(0,100,3):
if x%2==0:
count+=1
print(count)
求和套路
sum=0 # 利用变量sum累计求和
练习1:计算1+2+3····+100的和
sum=0
for x in range(1,101):
sum+=x
print('1+2+3····+100的和:',sum)
练习2:计算所有水仙花的和
sum=0
for x in range(100,1000):
if (x//100)**3+(x%100//10)**3+(x%10)**3==x:
sum+=x
print(sum)
while 循环
- 语法:
while 条件语句:
循环体 - 说明:
while - 关键字固定写法
条件语句 - 任何有结果的表达式;(只有赋值语句不行)
: - 固定写法
循环体 - 和while保持一个缩进的一条或者多条语句;需要重复执行的代码 - 执行过程:
先判断条件语句是否为True,如果为True就执行循环体,执行完循环体再判断条件是否为True
如果为True就再执行循环体···一次类推,当条件结果为False循环直接结束。
练习:使用while循环控制程序打印10个‘hello’
num =10
while num>0:
num-=1
print('hello')
while 循环和for 循环的选择
for循环:循环次数确定的时候使用
while循环:循环次数不确定的时候使用(程序员在写代码的时候没有办法通过任何方式来确定循环次数)
练习:提示用户不断输入内容,直到输入的数据是0为止
value=input('请输入:')
while value!='0':
value=(input('请输入:'))
循环关键字
continue和break
continue和break只能出现在循环体中
1)continue - 结束一次循环/结束当次循环
如果在执行循环体的时候遇到了continue,那么当次循环结束,直接进入下一次循环
for x in range(4):
print('======')
continue
print('------')
print('++++++')
'''
x=0: ======
x=1: ======
x=2: ======
x=3: ======
'''
for x in range(10):
if x==5 or x==8:
continue
print(x)
'''
0
1
2
3
4
6
7
9
'''
- break - 结束整个循环
如果在执行循环体的时候遇到了break,整个循环直接结束
for x in range(4):
print('======')
break
print('------')
print('++++++')
'''
======
'''
for x in range(10):
print(x)
if x==3:
break
'''
0
1
2
3
'''
- 含有break的while循环
'''
while True:
需要重复执行的操作
if 循环结束的条件:
break
'''
while True:
value=input('请输入:')
if value=='0':
break # 无法估计循环次数,直至输入的字符串是0结束循环
else
完整for循环:
for 变量 in 序列:
循环体
else:
代码段
完整while循环
while 条件语句:
循环体
else:
代码段
else结构的存在不影响原来循环的执行,当循环是 自然死亡else后面的代码段会执行
如果循环是因为遇到break而结束的else后面的代码段不执行
for x in range(4):
print(x,'======')
else:
print('else')
'''
0 ======
1 ======
2 ======
3 ======
else
'''
day 4_循环关键字习题
基础题
-
使用for和while循环输出 0~100内所有3的倍数。
for x in range(0,100): if x%3==0: print(x) x=0 while x<100: if x%3==0: print(x) x+=1
-
使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
for x in range(100,200): if (x%100//10)%3==0 or (x%10)%3==0: print(x) x=100 while x<200: if (x%100//10)%3==0 or (x%10)%3==0: print(x) x+=1
-
统计100~200中十位数是5的数的个数
count=0 for x in range(100,200): if (x%100//10)==5: count+=1 print(count)
-
打印50~150中所有能被3整除但是不能被5整除的数
for x in range(50,150): if x%3==0 and x%5!=0: print(x)
-
计算50~150中所有能被3整除但是不能被5整除的数的和
sum=0 for x in range(50,150): if x%3==0 and x%5!=0: sum+=1 print(sum)
进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。mul=1 for x in range(1,11): mul*=x print('1*2*3*4*...*10的结果:',mul)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count=0 for x in range(100): if x%10==2 and x%3==0: count+=1 print('100以内个位数是2并且能够被3整除的数的个数:',cunt)
-
输入任意一个正整数,求他是几位数?
i=int(input('请输入任意正整数:')) count=0 while True: if i//(10**count): count+=1 else: break print(count)
注意: 这儿不能使用字符串,只能用循环
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for x in range(100,1000): if (x//100)**3+(x%100//10)**3+(x%10)**3==x: pritn(x)
挑战题
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
i=int(input('请输入一个正整数:')) for x in range(2,i): if i%x==0 and i!=x: print(i,'不是素数') break else: print(i,'是素数')
-
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
n=int(input('请输入n:')) num_1=1 num_2=1 for x in range(3,n+1): num_x=num_1+num_2 num_1=num_2 num_2=num_x print(num_2)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for j in range(1,10): for i in range(1,j+1): print(i,'×',j,'=',i*j,end=' ') print('')
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
horse=100
num=100
for big in range(100):
for middle in range(100):
for small in range(100):
if num==big*3+middle*2+small*0.5 and horse==big+middle+small and small%2==0:
print(big,middle,small)