01for循环
循环 - 代码一遍,却可以执行多次
循环分为:for循环,while循环
-
- for循环
- 语法:
for 变量 in 序列:
循环体 - 说明:
- for、in - 关键字
- 变量 - 变量名(可以是没有定义的变量名,也可以是已经定义过的变量名)
- 序列 - 容器型数据类型的数据,常见序列:字符串,列表,元祖,字典,集合。迭代器,生成器,range等
- : - 固定写法
- 循环体 - 和for保持一个缩进的一条或者多条语句。(需要重复执行的代码)
- 执行过程:
- 让变量去序列中取值,一个一个的取,取完为止,每取一个值就执行一次循环体。
- (序列中元素的个数决定for循环的循环次数)
for x in 'abc': print(x, 'world') # a world # b world # c world
-
- range函数 - 产生指定范围的数字序列
range(N) - 产生 0~N-1的数字序列 例如range(3)—0,1,2
range(M,N) - 产生M ~ N-1 的数字序列 例如range(10,15)—10,11,12,13,14
range(M,N,step) - 产生M ~ N-1 的数字序列,step步长 例如range(10,15,2) 10,12,14
for i in range(5):
print(i, '你好')
# 0 你好
# 1 你好
# 2 你好
# 3 你好
# 4 你好
for i in range(2, 5):
print(i, '你好')
# 2 你好
# 3 你好
# 4 你好
for i in range(10, 15, 2):
print(i, '你好')
# 10 你好
# 12 你好
# 14 你好
for i in range(10, 2, -2):
print(i, '你好')
# 10 你好
# 8 你好
# 6 你好
# 4 你好
# 练习1:打印100以内所有的偶数
for i in range(0, 100, 2):
print(i)
# 练习2:统计100以内奇数的个数
x = 0
for i in range(1, 100, 2):
x += 1
print('100以内奇数的个数:',x)
# 练习3:统计100以内能被3整除的偶数的个数
# 方法一
x = 0
for i in range(100):
if i % 6 == 0:
x += 1
print('100以内能被3整除的偶数的个数为:', x)
# 方法二
x = 0
for i in range(0, 100, 6):
x += 1
print('100以内能被3整除的偶数的个数为:', x)
# 练习4:计算1+2+3+...+100的和
x = 0
for i in range(1, 101):
x += i
print('1+2+3+...+100的和为:', x)
# 练习: 计算100~200之间所有能被3整除但是不能5整除的数和
sum1 = 0
for i in range(100, 200):
if i % 3 == 0 and i % 5 != 0:
sum1 += i
print(sum1)
# f2
sum1 = 0
for i in range(102, 201,3):
if i % 5 != 0:
sum1 += i
print(sum1)
02while循环
-
while循环
- 语法:
while 条件语句:
循环体 - 说明:
- while - 关键字,固定写法
- 条件语句 - 任何有结果的表达式(除了赋值语句)
- : - 固定写法
- 循环体 - 和while保持一个缩进的一条或者多条语句
- 执行过程:
- 先判断条件语句是否为True,如果是就执行循环体,;执行完循环体,在判定条件语句是否为True
- 为True 就再执行循环体。。以此类推,知道条件语句为False结束
i = 3 while i > 0: print('hello') i -= 1
- 语法:
-
for和 while的选择
当循环次数确定的时候用for
循环次数不确定的时候用while 例如: 提示用户输入密码,直到输入正确
# 练习:提示用户输入密码,直到输入正确为止
"""
请输入密码: 123
请输入密码: 321
请输入密码: 2312
....
请输入密码: 123456
结束
"""
pw = '123456'
flag = 1
aa = input('请输入密码:')
while flag:
if aa == pw:
flag = 0
print('密码正确!')
else:
aa = input('密码错误,请重新输入密码:')
continue
# f1
input_pw = input('请输入密码:')
while input_pw != pw:
input_pw=input('请输入密码:')
# f2
while input('请输入密码:') != pw:
pass
# 猜数字
import random
num = random.randint(0, 100)
flag = 1
count = 0
aa = int(input('开始游戏!请输入0~100的数字:'))
while flag:
count += 1
if aa == num:
flag = 0
if count <= 5:
score = '天才'
elif count <= 10:
score = '普通人'
else:
score = '智商告急'
print('恭喜你!猜中了!你一共猜了', count, '次,你的游戏等级为:', score)
elif aa > num:
aa = int(input('猜大了!请重新输入数字:'))
else:
aa = int(input('猜小了!请重新输入数字:'))
03循环关键字
循环关键字 - continue break else
-
1.continue - 结束一次循环
执行循环体的时候如果遇到continue, 当次循环直接结束,直接进入下一次循环
for x in range(3): print('===') print('+++') continue # 循环结束,直接进入下一次循环 print('---') # === # +++ # === # +++ # === # +++ for x in range(10, 20): if x % 3 == 0: continue print('x=', x) # x= 10 # x= 11 # x= 13 # x= 14 # x= 16 # x= 17 # x= 19
-
2.break - 结束整个循环 (只能在循环体里用)
执行循环体的时候如果遇到break, 整个循环直接结束
for x in range(3): print('===') print('+++') break # 循环结束 print('---') print(x) # === # +++ # 0
- 使用while 循环的套路
- while True:
每次循环要做的事情
if 循环结束的条件:
break
- while True:
- 使用while 循环的套路
-
3.else
-
for 变量 in 序列:
循环体
else:
代码段 -
while 条件语句:
循环体
else:
代码段 -
总结:
- 1)else的存在不影响原来循环的执行;
- 2)else后面的代码段在循环自然死亡的时候会执行,循环因为遇到break而结束的时候else后面的代码不执行
for x in range(3):
print('hello')
else:
print('world')
# hello
# hello
# hello
# world
for x in range(3):
print('hello')
if x == 1:
break
else:
print('world') # 判断循环里有没有遇到break
# 遇到了break,结束循环,else后不执行
# hello
# hello
作业
基础题
-
使用for和while循环输出 0~100内所有3的倍数。
# for循环 for i in range(0, 100, 3): print('0~100内所有3的倍数:', i) # while循环 i = 0 while i < 100: i += 3 print('0~100内所有3的倍数:',i)
-
使用for和while循环输出100~200内个位数或者十位数能被3整除的数。
# for循环 for i in range(100,200): ge = i % 10 shi = i // 10 % 10 # print(ge, shi) if ge % 3 == 0 or shi % 3 == 0: print('100~200内个位数或者十位数能被3整除的数为',i) #while循环 i = 100 while i < 200: ge = i % 10 shi = i // 10 % 10 if ge % 3 == 0 or shi % 3 == 0: print('100~200内个位数或者十位数能被3整除的数为',i) i += 1
进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。sum = 1 for i in range(10): sum *= (i+1) print(sum)
-
统计100以内个位数是2并且能够被3整除的数的个数。
count = 0 for i in range(100): ge = i % 10 if ge == 2 and i % 3 == 0: count +=1 # print(i) print('100以内个位数是2并且能够被3整除的数的个数为:',count)
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
count = 0 num = int(input('请输入一个正整数:')) while num > 0: ge = num % 10 count += 1 num //= 10 print('该正整数是',count,'位数')
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for i in range(100, 999): ge = i % 10 shi = i //10 % 10 bai = i // 100 if ge**3 + shi ** 3 + bai ** 3 == i: print(i)
挑战题
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
flag = 1 num = int(input('请输入一个大于2的数:')) for i in range(2, num//2): if (num % i == 0): flag = 0 print('该数不是素数') break if flag: print(num,'是素数')
-
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定)
a=1 b=1 n=int(input('请输入:')) for i in range(n-2): c=a+b a=b b=c print('第n个斐波那契数的值是:',c)
-
输出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('')
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for i in range(100):
for j in range(100):
for k in range(100):
if (3*i + 2*j + 0.5*k == 100) and (i + j + k == 100):
print(i, j, k)