语言基础
day4 - 循环
01.for循环
循环 - 让代码重复执行(代码写一遍,运行的时候可以执行多次)
1.for循环
for循环如图:
语法:
for 变量 in 序列
循环体
说明:
for、in - 关键字,固定写法
变量 - 写一个变量名(可以是已经定义过的,也可以没有定义过的)
序列 - 容器型数据类型对应的数据,常见序列:字符串、列表、元组
字典、集合、迭代器、生产器、range。
: - 固定写法
循环体 - 和for保持一个缩进的一条或者多条语句;就是需要重复执行的代码.
执行过程:
让变量去序列中取值:一个一个的取,取完为止,每取一个值执行一个循环体.
for循环循环的次数和序列中元素的个数有关
for x in 'ab12你好':
print(x,'hello')
# a hello
# b hello
# 1 hello
# 2 hello
# 你 hello
# 好 hello
2.range函数 - 产生指定范围的数字序列
1)range(N) - 产生[0,N)的数字序列,其中步长是1
2)range(M,N) - 产生[M,N)的数字序列,步长为1
3)range(M,N,step) - 产生[M,N)的数字序列,步长为step指定的值
for x in range(10):
print(x)
for x in range(4):
print('hello')
for x in range(10,20):
print(x)
for x in range(10,20,2):
print(x)
for x in range(20,0,-3):
print(x)
练习1:打印100以内所有的偶数
for x in range(2,100,2):
print(x)
练习2:打印100到200中所有个位数是3的数
for x in range(100,201):
a=x % 10
if a==3:
print(x)
练习3:打印所有的水仙花数
for num in range(100,1000):
a = num // 100
b = num // 10 % 10
c = num % 10
if a ** 3 + b ** 3 + c ** 3 == num:
print(num)
02.两个套路
1.统计100以内偶数的个数
count=0
for x in range(2,100,2):
count +=1
print(count)
2.统计100以内能被3整除的偶数的个数
count = 0
for x in range(0,100,6):
count+=1
print(count)
3.计算1+2+3+…+100的和
sum = 0
for x in range(101):
sum+=x
print(sum)
4.计算所有水仙花数的和
sum=0
for num in range(100,1000):
a = num // 100
b = num // 10 % 10
c = num % 10
if a ** 3 + b ** 3 + c ** 3 == num:
sum+=num
print(sum)
03.while循环
1.while循环
循环如图:
语法:
while 条件语句:
循环体
说明:
while - 关键字:固定写法
条件语句 - 任何有结果的表达式(只有赋值语句不行)
: - 固定写法
循环体 - 和while保持一个缩进的一条或者多条语句:需要重复执行代码
执行过程:
先判断条件语句是否为True,如果为True就一直执行循环体,当条件语句结果为False循环直接结束.
使用 while循环控制程序打印10个’hello’
num=0
while num<10:
num+=1
print('hello')
while循环控制循环次数的原则:让条件经历过指定次数后由True变成False
2.while和for的选择
for循环:循环次数确定的时候使用
while循环:如果循环次数不确定的时候使用
练习:提示用户不断输入内容,直到输入的数据是0为止
num=' '
while num !='0':
print(num)
num=input('请输入:')
04.循环关键字
1.continue和break
continue 和 break 只能出现在循环体中
1)continu - 结束一次循环/结束当次循环
如果在执行循环体的时候遇到了continu,那么当次循环结束,直接进入下一次循环
2)bre- 结束整个循环ak
如果在执行循环体的时候遇到了break,整个循环直接结束.
for x in range(4):
print('======')
continue
print('++++++')
print('------')
for x in range(4):
print('======')
break
print('++++++')
print('------')
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')
x=0
while x<5:
x+=1
print(x)
else:
print('else')
作业
基础题
-
使用for和while循环输出 0~100内所有3的倍数。
num=0 while True: num+=3 if num >=100: break print(num) print('==========================================') for num in range(3,100,3): print(num)
-
使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
for num in range(100,201): if num % 10 % 3==0 or num//10%10%3==0: print(num) print('==========================================') num=99 while 99<=num<200: num+=1 if num % 10%3==0 or num//10%10%3==0: print(num)
-
统计100~200中十位数是5的数的个数
conut=0 for x in range(100,201): a=x//10%10 if a==5: 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整除的数的和
count=0 for x in range(50,151): if x % 3 == 0 and x % 5 !=0: count+=x print(count)
进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。count=1 for x in range(1,11): count*=x print(count)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count=0 for x in range(0,100): a=x % 10 if a==2 and x % 3 ==0: count+=1 print(count)
-
输入任意一个正整数,求他是几位数?
length=0 num=int(input('请输入一个正整数:')) while True: num=num//10 length+=1 if num==0: break print(length)
注意: 这儿不能使用字符串,只能用循环
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for num in range(100,1000): a = num // 100 b = num // 10 % 10 c = num % 10 if a ** 3 + b ** 3 + c ** 3 == num: print(num)
挑战题
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
num=int(input('请输入一个整数:')) for i in range(2,num): y = num % i if y == 0: print('不是质数') break else: print('是质数')
-
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
num = int(input('请输入第n个数:')) value1 = 1 value2 = 0 current = 1 for x in range(2,num+1): current=value2+value1 value2 = value1 value1 = current print('第',num,'个数是',current)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
print('9*9乘法口诀') i=int(input('请输入行:')) j=int(input('请输入列:')) z='' for x in range(0,i+1): for y in range(0,j+1): z=x*y print(z)
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
#假如大马x匹,中马y匹,小马100-x-y匹 for x in range(0,34): for y in range(0,51): if 3*x + 2*y+(100-x-y)/2==100: print('大马',x,'中马',y,'小马',100-x-y)