0710Python总结-while双向循环,关键字的使用(pass break continue),for循环

一.双向循环的经典练习

1.打印十行十列小星星(2个循环)

# j 外循环用来控制行数
j = 0
while j<10:

	# 打印一行十个星星
	i = 0
	while i <10:
		# 写上循环的逻辑
		print("*",end="")
		i+=1
		
	# 打印换行
	print()

	j+=1

2.打印十行十列小星星(隔列换色小星星,两个循环)

i = 0
while i<10:
	# 打印隔列换色星星
	j = 0
	while j < 10:
		if j % 2 == 0:
			print("★",end="")
		else:
			print("☆",end="")
		j+=1

	# 打印换行
	print()
	i+=1

3.打印十行十列小星星(隔行换色小星星,两个循环)

"""外层循环动一次,内层循环动10次,外层循环动的慢,内层循环动的快"""
i = 0
while i<10:
	# 打印隔列换色星星
	j = 0
	while j < 10:
		if i % 2 == 0:
			print("★",end="")
		else:
			print("☆",end="")
		j+=1

	# 打印换行
	print()
	i+=1

4.99乘法表

方式一
# i控制行
i = 1
while i <= 9:
	# j 控制列
	# 打印表达式
	j = 1
	while j<=i:
		# 打印表达式 谁*谁=谁 %2d 默认居右显示
		print("%d*%d=%2d " % (i,j,i*j),end="")
		j+=1
	
	# 打印换行
	print()
	i+=1
方式二
# i控制行
i = 9
while i >= 1:
	# j 控制列
	# 打印表达式
	j = 1
	while j<=i:
		# 打印表达式 谁*谁=谁 %2d 默认居右显示
		print("%d*%d=%2d " % (i,j,i*j),end="")
		j+=1
	
	# 打印换行
	print()
	i-=1
方式三
i = 1
while i<=9:
	
	# 1.打印空格
	"""
	第一行循环8组空格 8~1 是循环8组空格
	第二行循环7组空格 7~1 是循环7组空格
	...
	第八行循环1组空格 1 是循环1组空格
	第九行 不需要空格 所以 k>0
	"""
	k = 9 - i
	while k>0:
		print("       " , end="")
		k -= 1 

	# 2.打印表达式 
	j = 1
	while j<=i:
		# 打印表达式 谁*谁=谁 %2d 默认居右显示
		print("%d*%d=%2d " % (i,j,i*j),end="")
		j+=1
		
	# 3.打印换行
	print()
	
	i+=1
方式四
i = 9
while i>=1:
	
	# 1.打印空格
	"""
	第一行循环8组空格 8~1 是循环8组空格
	第二行循环7组空格 7~1 是循环7组空格
	...
	第八行循环1组空格 1 是循环1组空格
	第九行 不需要空格 所以 k>0
	"""
	k = 9 - i
	while k>0:
		print("       " , end="")
		k -= 1 

	# 2.打印表达式 
	j = 1
	while j<=i:
		# 打印表达式 谁*谁=谁 %2d 默认居右显示
		print("%d*%d=%2d " % (i,j,i*j),end="")
		j+=1
		
	# 3.打印换行
	print()
	
	i-=1

5.求吉利数字100 ~ 999 666 888 111 222 333 444 … 123 789 567 765 432

个位:987 % 10 = 7
十位:987 // 10 % 10 = 8
百位:987 // 100 = 9

方法一
i = 100
while i<1000:
	gewei = i % 10
	shiwei = i // 10 % 10
	baiwei = i // 100
	
	if gewei == shiwei and shiwei == baiwei:
		print(i)
		
	#123
	elif shiwei  == gewei-1 and  shiwei == baiwei+1:
		print(i)
		
	#765
	elif shiwei == gewei+1 and shiwei == baiwei-1:
		print(i)
	i+=1
方法二
i = 100
while i<1000:
	strvar = str(i) # "123"
	baiwei = int(strvar[0])
	shiwei = int(strvar[1])
	gewei = int(strvar[-1])
	if gewei == shiwei and shiwei == baiwei:
		print(i)
		
	#123
	elif shiwei  == gewei-1 and  shiwei == baiwei+1:
		print(i)
		
	#765
	elif shiwei == gewei+1 and shiwei == baiwei-1:
		print(i)
	i+=1

6.百钱买百鸡

公鸡x 母鸡y 小鸡z
公鸡1块钱1只,母鸡3块钱一只,小鸡5毛钱一只
问: 用100块钱买100只鸡,有多少种买法?
两个条件同时满足
x+y+z = 100
x
1 + y3 + z0.5 = 100*

# 公鸡
x = 0
count = 0
while x <= 100:

	# y母鸡
	y = 0
	while y <= 33:
		
		# z小鸡
		z = 0
		while z <= 100:
			if x+y+z == 100 and x*1 + y*3 + z*0.5 == 100:
				count += 1
				print(x,y,z)
			z+=1
	
		y+=1

	x += 1

print(count)

二.关键字的使用 pass break continue

1.pass 过(占位)

if 10 == 10:
	print(123)
	
while True:
	pass

2.break 终止当前循环

# 打印1~10 遇到5就终止循环
i = 1
while i <=10 :
	if i == 5:
		break
	print(i)
	i+=1

break 终止的是当前循环

i = 1
while i <= 3:
	j = 1
	while j<=3:
		if j == 2:
			break
		print(i,j)
		j+=1
	i+=1

3.continue 跳过当前循环,从下一次循环开始

打印1~10 跳过5
i = 1
while i<=10:

	if i == 5:
		# 需手动自增加1. 当执行continue时,后面的代码不执行,跳到while循环的条件判断处,会造成死循环
		i+=1
		continue
	print(i)

	i+=1

打印1~ 100 所有不含有4的数字
//可以取到一个数的高位
% 可以取到一个数的低位
46 // 10 = 4
46 % 10 = 6

方法一
i = 1
while i<=100:
	if i // 10 == 4 or i % 10 == 4:
		i+=1
		continue
	print(i)
	i+=1
方法二
i = 1
while i <= 100:
	strvar = str(i)
	if "4" in strvar:
		i+=1
		continue

	print(i)
	i+=1

三.for循环

遍历,循环,迭代

lst = ["刘鑫","刘子豪","刘子涛","晏国彰"]
i = 0
while i<len(lst):
	# 代码的逻辑
	print(lst[i])
	i+=1
# for主要用于遍历数据而提出,while在遍历数据时,有局限性
for 变量 in 可迭代对象:
	code1
	code2
可迭代对象(容器类型数据,range对象,迭代器)
遍历字符串

container = “雷霆嘎巴,ZBC,无情哈拉少”

遍历列表

container = [“刘鑫”,“刘子豪”,“刘子涛”,“晏国彰”]

遍历元组

container = (1,2,3,45)

遍历集合

container = {“白星”,“高峰峰”,“孙志和”,“刘鹏”,“牧树人”}

遍历字典 (遍历字典时,只遍历键)

container = {“ww”:“伟大的人,风流倜傥”,“msr”:“树人,伟大的人”,“mh”:“猥琐的老男人”}

for i in container:
	print(i)
遍历不等长的二级容器
container = [["刘聪","毛洪磊","余锐","张家豪"],("蔡文姬","张杰")]

for i in container:
	# print(i)
	for j in i:
		print(j)
变量的解包
a,b = 1,2
a,b = [3,4]
a,b = {"a":5,"b":6}
print(a,b)
遍历等长的二级容器
container = [("王健林","王思聪","王美丽") , ("马云","马化腾","马生平") , ("王宝强","马蓉","宋小宝")  ]
for a,b,c in container:
	print(a,b,c)
# a,b,c = ("王健林","王思聪","王美丽")
# a,b,c = ("马云","马化腾","马生平")
# a,b,c = ("王宝强","马蓉","宋小宝") 

range对象

range(开始值,结束值,步长)
结束值本身取不到,取到结束值之前的那个数

只有一个值 0~9
for i in range(10):
	print(i)
只有两个值
for i in range(3,11):
	print(i)
只有三个值
for i in range(1,10,3):
	print(i)  # 1,4,7
#1 (1+3)=>4  (4+3)=>7 (7+3)=>10取不到
倒序打印10 ~ 1
for i in range(10,0,-1):
	print(i)
# 10 9 8 7 6 .... 1

总结

while : 较为复杂的逻辑
for : 数据的遍历
while 和 for 部分代码可以互相转换

区别写法1
i = 1
while i<=10:
	if i == 5:
		i+=1
		continue
	print(i)
	i+=1

for i in range(1,11):
	if i == 5:
		continue
	print(i)
区别写法2
i = 1
while i <= 9:
	j = 1
	while j<=i:
		print("%d*%d=%2d " % (i,j,i*j),end="")
		j+=1
	print()
	i+=1


for i in range(1,10):
	for j in range(1,i+1):
		print("%d*%d=%2d " % (i,j,i*j),end="")
	print()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值