day3-循环-(for循环-while循环-continue和break-else)
python中的循环有两种:for循环和while循环
-
for 循环
""" 语法: for 变量 in 序列: 循环体 说明: for/in - 关键字,固定写法 变量 - 可以是任意变量;一般写一个新的变量 序列 - Python中容器性数据类型;例如:字符串、列表、字典、元祖、集合、迭代器、生成器、range... 冒号 - 固定写法 循环太 - 和for保持一个缩进的一条或者多条语句 需要重复执行的代码块 执行过程: 让变量去序列中取值,一个一个的取,取完为止,每取一个值执行一个循环体 (for循环次数看序列中元素的个数) """ # 例如: for i in 'abcde': print(i,'hello') # 因为此序列元素有5个 会打印5条 hello
-
range的用法
""" 1)range(N) - 产生一个 0 - N-1的数字序列:0,1,2,3...N-1(N必须是整数) 2)range(M,N) - 产生 M - N-1的数字序列: M,M+1,M+2,M+3,...N-1(M和N都是整数并且M小于N) 3)range(M,N,step) - step控制每次增加的值(默认是1):M,M+step,M+step...N-1 """ count = 0 for i in range(10): count += 1 print('我爱千锋{}次'.fromat(count)) for y in range(10,100,10): print('y',y)
练习:产生 100到1所有数字对应的序列
for i in range(100,0,-1): print(i)
练习:求和套路; 计算1+...100的和
sum = 0 for i in range(100): sum += i print(sum)
统计个数:统计0-100中能被3整除的偶数个数
count = 0 for y in range(101): if y % 3 == 0 and y & 1 == 0: count += 1 print(count) count = 0 for num in range(0,101,6): count += 1 print(count)
求1000以内能被7整除但是不能被3整除的数的和
# 方法一: sum = 0 for i in range(1000): if i % 7 == 0 and i % 3 != 0: sum += i print(sum) # 方法二: sum = 0 for i in range(0,1000,7): if i % 3 != 0: sum += i print(sum)
统计1000以内十位数加上个位数的和等于5的个数
count = 0 for i in range(1000): if i % 100 //10 + i % 10 == 5: count += 1 print(count)
while循环
-
while循环
""" 语法: while 条件语句: 循环体 说明: while - 关键字,固定写法 条件语句 - 除了赋值语句以外的表达式 冒号 - 固定写法 循环体 - 和while保持一个缩进 重复执行的代码 执行过程: 先判断条件语句是否为True,为True就执行循环体 执行完循环体再判断条件语句是否为True,为True再执行循环体 ...直到条件语句的结果为False整个循环体就结束了 while 控制次数的套路 变量= 0 while 变量 < 次数: 需要重复执行的循环体 变量 += 1 """ num = 0 while num < 5: print('===') num += 1 # 执行过程 """ num = 0; num < 5 --> True --> print('=====') num = 1; num < 5 --> True --> print('=====') num = 2; num < 5 --> True --> print('=====') num = 3; num < 5 --> True --> print('=====') num = 4; num < 5 --> True --> print('=====') num = 5; num < 5 --> False --> 循环结束! """
-
for循环和while循环的选择
什么时候用for循环:
1)遍历序列(将序列中的元素一个一个取出来)
2)循环次数确定
什么时候用while循环
1)是循环
2)循环次数不确定
练习:写程序实现不断输入数据,直到输入的内容为0为止
# 方法一 : value = input('请输入:') while value != '0': value = input('请输入:') # 方法二: while True: value = input('请输入:') if value == '0' break
continue和break
continue和break只能在循环体中使用
-
continue - 结束本次循环(在实际开发中一般写在条件语句里面)
如果在执行的时候遇到continue,那么当次循环结束直接进入下次循环
for x in range(5); print('====') continue print(+++++) # ==== # ==== # ==== # ==== # ==== count = 0 for x in range(10): if x % 3 == 0: continue count += 1 """ count = 0 x = 0: if 0 % 3 == 0 --> True: continue x = 1: if 1 % 3 == 0 --> False: count += 1 count = 1 x = 2: if 2 % 3 == 0 --> False: count += 1 count = 2 ... """
-
-
break - 结束整个循环
如果执行循环体的时候遇到break,那么整个循环直接结束
num = 0 while num < 5: print('====') break print(-----) num += 1 # ====
-
while循环的用法
while True:
需要重复执行的操作
if 循环结束的条件
break
# 猜数字 """ 随机产生一个0-100数字:num,用户不断输入数字直到输入的值和产生的随机值相等游戏结束 """ from random import randint num = randint(0,100) count = 0 while True: num1 = int(input('猜猜0--100的数字:')) count += 1 if num1 == num: print('恭喜你,count,次就猜对了') elif num1 > num: print('大了,能猜的小点嘛!') else: print('小了,能猜的再大点嘛!') num1 = randint(1,100) num2 = int(input('猜猜1-100的整数数字:')) count = 0 while num1 != num2: count += 1 if num2 > num1: print('大了,能猜的小点嘛!') num2 = int(input('猜猜1-100的整数数字:')) elif num2 < num1: print('小了,能猜的再大点嘛!') num2 = int(input('猜猜1-100的整数数字:')) else: count += 1 print('恭喜你,count,次就猜对了')continue和break
else
-
完整的for循环和while循环
""" for 变量 in 序列: 循环体 else: 代码块 while 条件语句: 循环体 else: 代码块 else不影响循环体的执行;else后面的代码块在循环正常结束的时候会执行,如果循环因为遇到break而结束,else后面的代码就不会执行 """ for i in range(5): if i == 3: break print('===') else: print('else') # 不会执行
基础题
-
根据输入的成绩的范围打印
及格
或者不及格
。while True: score = float(input('请输入你的英语成绩:')) if score >= 60: print('及格') else: print('不及格')
-
根据输入的年纪范围打印
成年
或者未成年
,如果年龄不在正常范围内(0~150)打印这不是人!
。while True: age = int(input('输入你的年龄:')) if 1 <= age < 18: print('你还未成年!') elif 18 <= age <150: print('恭喜你,成年了!') else: print('这不是人!')
-
输入两个整数a和b,若a-b的结果为奇数,则输出该结果,否则输出提示信息
a-b的结果不是奇数
。while True: a = int(input('请输入第一个数:')) b = int(input('请输入第二个数:')) if (a - b) & 1: print('a-b的结果为奇数:',a-b) else: print('a-b的结果不是奇数') # 方法二: result = (a - b) if (a - b) & 1 else '不是奇数' print(result)
-
使用while循环输出 0~100内所有3的倍数。
num = 0 while num < 100: if num % 3 == 0: print(num) num += 1
-
使用while循环输出0~100内所有的偶数。
num = 0 while num < 100: if num & 1 == 0: print(num) num += 1
进阶题
-
使用循环计算
1*2*3*4*...*10
的结果。num = 1 for i in range(1,11): num *= i print(num)
-
统计100以内个位数是2并且能够被3整除的数的个数。
# 方法一: count = 0 for i in range(100): if i % 10 == 2 and i // 3 == 0: count += 1 print(count) # 方法二: count = 0 for i in range(0,100,3): if i % 10 == 2: count += 1 print(count) # 方法三: count = 0 for i in range(2,100,10): if i % 3 == 0: count += 1 print(count)
-
输入任意一个正整数,求他是几位数?
注意: 这儿不能使用字符串,只能用循环
# 方法一: while True: num = int(input('输入任意一个正整数:')) n = str(num) print('这个数是:',num,'它是{}为数'.format(len(n))) # 方法二: num = int(input('输入任意一个正整数:')) count = 0 while True: num //= 10 count += 1 if num == 0: break print(count)
-
打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字⽴方和等于该数本身。例如:153是
⼀个⽔仙花数,因为
1³ + 5³ + 3³
等于 153。for i in range(100, 1000): ge = i % 10 shi = i // 10 % 10 bai = i // 100 if ge ** 3 + shi ** 3 + bai ** 3 == i: print('水仙花数为:',i) # 水仙花数为: 153 # 水仙花数为: 370 # 水仙花数为: 371 # 水仙花数为: 407
挑战题
-
判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数)
''' 思路:N是否是素数就看在2 - N-1 之间有没有一个数能够被N整除 ''' num = 45 if num == 0 or num == 1: print('不是素数') #方法一: for i in range(2,num): if num % i == 0: print('不是质数') break else: print(num,'是质数') # 方法二:(优化次数) num = 110 for i in range(2,int(num**0.5+1): if num % i == 0: print('不是素数') break else: print('数素数')
-
求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34.... (这儿的n可以是任意正整数,可以通过输入来确定)
n = 6 if n == 1 or n == 2: print(1) else: p1 = p2 = 1 # 根据求第几位值来决定挪的次数 for x in range(n - 3): # 每挪一次 p1, p2 = p2, p1 + p2 print(p1 + p2)
-
输出9*9口诀。 程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
for i in range(1,10): for j in range(1,i+1): print('{}*{}={}'.format(j,i,i*j),end=' ') print('')
-
这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?(可以直接使用穷举法)
for b in range(1, 100 // 3 + 1): for m in range(1, 100 // 2+1): s = 100 - b - m if b * 3 + m * 2 + s * 0.5 == 100: print('大马:', b, '中马', m, '小马', s)