python学习 day6_双层循环、for循环

python学习 day6

  • 双层循环练习
    • 十行十列小星星
    • 十行十列隔列换色小星星
    • 十行十列隔行换色小星星
    • 99乘法表
      • 方向一
      • 方向二
      • 方向三
      • 方向四
    • 求吉利数字
      • 方法一
      • 方法二 字符串形式
    • 百钱买百鸡
  • pass break continue else
    • 1.pass
    • 2.break
    • 3.continue
    • 4.else
  • for ... in 循环
    • 特性格式介绍
    • 遍历等长的二级容器
    • 变量的解包
    • 遍历不等长的二级容器
    • range对象(配合for循环使用)
  • 总结:

双层循环练习

  • 本次课题:利用双层循环完成昨天练习的条件。

十行十列小星星

使外层while循环打印十次换行,而内层while在每次外层while循环时循环打印十次星星。

j = 0
while j<10:

	# 打印星星
	i = 0
	while i <10:
		print("★",end="")
		i+=1
		
	# 打印换行
	print()

	j+=1

效果:

★★★★★★★★★★
★★★★★★★★★★
★★★★★★★★★★
★★★★★★★★★★
★★★★★★★★★★
★★★★★★★★★★
★★★★★★★★★★
★★★★★★★★★★
★★★★★★★★★★
★★★★★★★★★★

十行十列隔列换色小星星

使外层while循环打印十次换行,而内层while在每次外层while循环时循环十次,并每奇数次打印★,偶数次打印☆。

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

效果:

★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆
★☆★☆★☆★☆★☆

十行十列隔行换色小星星

使外层while循环打印十次换行,而内层while在每次外层while循环时循环十次,并每当外层循环奇数次时打印★,外层循环偶数次时打印☆。
外层循环动的慢j,内层循环动的快i

j = 0

while j<10:

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

效果:

★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆

99乘法表

方向一

预期效果:

1*1= 1 
2*1= 2 2*2= 4 
3*1= 3 3*2= 6 3*3= 9 
4*1= 4 4*2= 8 4*3=12 4*4=16 
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 

代码:
使外层while循环打印九次换行,并创建1~9的被乘数,而内层while的循环次数根据外层创建乘数的大小变化,并创建相应的乘数,然后利用字符串格式化打印出当前乘法公式。

i = 1
while i <= 9 :

	# 打印里面的表达式
	j = 1
	while j<=i:
		print(  "%d*%d=%2d " % (i,j,i*j)  , end = "")
		j+=1
		
	# 打印换行
	print()
	
	i+=1

方向二

预期效果:

9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 
4*1= 4 4*2= 8 4*3=12 4*4=16 
3*1= 3 3*2= 6 3*3= 9 
2*1= 2 2*2= 4 
1*1= 1 

代码:
与方向一不同点在于使外层while循环打印九次时,创建的被乘数颠倒为9~1。

i = 9
while i>=1 :

	# 打印里面的表达式
	j = 1
	while j<=i:
		print(  "%d*%d=%2d " % (i,j,i*j)  , end = "")
		j+=1
		
	# 打印换行
	print()
	
	i-=1

方向三

预期效果:

                                                        1*1= 1 
                                                 2*1= 2 2*2= 4 
                                          3*1= 3 3*2= 6 3*3= 9 
                                   4*1= 4 4*2= 8 4*3=12 4*4=16 
                            5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 
                     6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
              7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
       8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 

代码:
与方向一区别在于在内层while循环前新增了一个同层的while循环,用于打印与当前行数对应数量的空格。

i = 1
while i<= 9 :

	# 打印空格(一个表达式占了7个空格)
	k = 9 - i
	while k > 0:
		# 打印每组的空格(一组空格是7个)
		print("       " ,end="")
		k -= 1	

	# 打印表达式
	j = 1
	while j<=i:
		print(  "%d*%d=%2d " % (i,j,i*j)  , end = "")
		j+=1

	# 打印换行
	print()

	i+=1

方向四

预期效果:

9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
       8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
              7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
                     6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
                            5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 
                                   4*1= 4 4*2= 8 4*3=12 4*4=16 
                                          3*1= 3 3*2= 6 3*3= 9 
                                                 2*1= 2 2*2= 4 
                                                        1*1= 1 

代码:
与方向三区别在于外层创建被乘数顺序颠倒。(同方向一与方向二的区别)

i = 9
while i>=1 :

	# 打印空格(一个表达式占了7个空格)
	k = 9 - i
	while k > 0:
		# 打印每组的空格(一组空格是7个)
		print("       " ,end="")
		k -= 1	

	
	# 打印表达式
	j = 1
	while j<=i:
		print(  "%d*%d=%2d " % (i,j,i*j)  , end = "")
		j+=1

	# 打印换行
	print()

	i-=1

求吉利数字

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

  • // 地板除可以获取一个数的高位
  • % 取余可以获取一个数的低位
# 如789
个位: 789 % 10 = 9
十位: 789 // 10 % 10 = 8
百位: 789 // 100 = 7

方法一

利用地板除、取余,将每次输入循环的变量i的个位、十位、百位提取出来进行计算。

i = 100
while i <= 999:
	gewei = i % 10 
	shiwei = i // 10 % 10
	baiwei = i // 100
	
	# 三个一样的 666 888
	if shiwei == gewei  and shiwei == baiwei :
		print(i)
	
	# 123 345 789
	elif shiwei == gewei - 1 and shiwei == baiwei + 1:
		print(i)
	
	# 987 654 321
	elif shiwei == gewei + 1 and shiwei == baiwei - 1:
		print(i)
		
	i+=1

方法二 字符串形式

利用整形与字符串的互相强转,并用索引提取字符串中对应的元素,将每次输入循环的变量i的个位、十位、百位提取出来进行计算。

i = 100
while i <= 999:
	num = str(i)
	gewei = int(num[-1])
	shiwei = int(num[1])
	baiwei = int(num[0])
	# print(baiwei,shiwei,gewei)
	
	if shiwei == gewei  and shiwei == baiwei :
		print(i)
	
	# 123 345 789
	elif shiwei == gewei - 1 and shiwei == baiwei + 1:
		print(i)

	# 987 654 321
	elif shiwei == gewei + 1 and shiwei == baiwei - 1:
		print(i)		
		
	i+=1

百钱买百鸡

题目:
公鸡 母鸡 小鸡
公鸡1块钱1只,母鸡3块钱一只,小鸡5毛钱一只
问: 用100块钱买100只鸡,有多少种买法?

  • 利用三层while循环,将三个变量同时限制在题目中的各种条件里进行循环,并输出满足条件时三个变量的组合。
x = 0
while x<=100:

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

	x+=1

pass break continue else

1.pass

  • pass:过 ( 在代码块中无代码可写时,用pass占位)
if 5 == 5:
	pass

2.break

  • break:终止当前循环,只能应用在循环里

案例:打印1 ~ 10 ,遇到5 终止循环

单循环

i = 1				# 输出结果为 1 2 3 4
while i<=10:
	if i == 5:
		break
	print(i)   
	i+=1

多循环(终止当前循环)

i = 1
while i<=3:           # 只终止了嵌套中的、内层的while循环
	j = 1
	while j <= 3:
		if j == 2:
			break
		print(i,j)
		j+=1
	i+=1

3.continue

  • continue:跳过当前循环,从下一次开始,只能应用在循环里

案例:打印1~10 不要5

i = 1
while i<=10:
	if i == 5:
		# 手动加1,防止跳过下面的代码,产生没有自增的情况,出现死循环
		i+=1
		continue
		
	print(i)
	i+=1

案例:打印 1 ~ 100 所有不含有4的数字

方法一:

i = 1
while i<=100:
	if i % 10 == 4 or  i // 10 == 4:
		i+=1
		continue 
		
	print(i)
	i+=1

方法二:

  • 使用成员运算符:in not in
i = 1
while i <= 100:
	strvar = str(i)
	if "4" in strvar:
		i+=1
		continue
	print(i)
	i+=1

4.else

while+else
else:else的子代码会在循环正常结束的情况下运行(break干死while循环的的情况称之为非正常结束)
只有在break生效时才不会运行之后的与while同级的else

# n = 1
# while n<=5:
#     if n == 4:
#         break
#     print(n)
#     n+=1
# else:
#     print('else的代码运行')

for … in 循环

特性格式介绍

  • 特性:遍历,循环,迭代 都是把容器中的数据一个一个获取出来
  • 如果数据是无序的,while不能够遍历数据,for循环应用而生
    语法:
    for 变量 in 可迭代对象:
    code …
    可迭代的对象(容器类型数据 , range对象 , 迭代器)
  • 注意点:
    在循环的过程中不要修改被循环的对象
    遍历字典时,默认遍历的是字典的键

使用while循环打印列表lst中的元素:

lst = [1,2,3,4,5]
i = 0
while i<len(lst):
	print(lst[i])
	i+=1

使用for in循环打印列表lst中的元素:

lst = [1,2,3,4,5]
for i in lst:
	print(i)

遍历等长的二级容器

lst = [("王健林","王思聪","王美丽"), ("马云","马化腾","马冬梅"),("王宝强","马蓉","宋小宝") ]

for  i  in lst:
	# print(i)
	'''
	('王健林', '王思聪', '王美丽')
	('马云', '马化腾', '马冬梅')
	('王宝强', '马蓉', '宋小宝')
	'''
	for j in i:
		print(j)

变量的解包

a,b = 1,2       # a=1 b=2
a,b = [3,4]		# a=3 b=4
a,b = {"a":111,"b":222}		#  a='a' b='b'
a,b,c = ('王健林', '王思聪', '王美丽')		# a='王健林' b= '王思聪' c= '王美丽'
print(a,b,c)

遍历不等长的二级容器

lst = [("王健林","王思聪","王美丽"), ("马云","马化腾"),("王宝强",) ]
for i in lst:
	for j in i:
		print(j)

range对象(配合for循环使用)

格式:

range(start,end,step)
start : 开始值(默认为0)
end :   结束值( 最大值获取不到 , 获取到end 这个数之前那个
step :  步长(步长为负时从大到小遍历,默认为1)
  • range总结:从开始值不断+步长输出数值,直到结果不超过结束值-1,若步长为负,则不超过结束值+1

总结:

  • while 一般用于复杂的逻辑操作
    for 一般用在数据的遍历
    多数情况下 while和for可以通用

while:

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 in:

for i in range(1,10):
	for j in range(1,i+1):
		print("%d*%d=%2d " % (i,j,i*j) ,end="")
	print()

你可能感兴趣的:(之前的江湖,python)