【六】Python全栈之路--for循环

2023-11-02

1. 双向循环的练习

# 1.用两个循环完成十行十列的小星星
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.用两个循环完成十行十列隔行换色的小星星
"""
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
★★★★★★★★★★
☆☆☆☆☆☆☆☆☆☆
"""
"""
外层的循环i动的慢
内层的循环j动的快
外层的i动一次, 内层的循环动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 = 1
while i <= 9:
	
	# 打印对应的表达式
	j = 1
	while j <= i:
		print("%d*%d=%2d " % (i,j,i*j) ,end="" )
		j+=1
	
	# 打印换行
	print()
	
	i +=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
print("<====================>")
# 方向三
i = 1
while i <= 9 :
	kongge = 9 - i
	# 打印空格
	while kongge > 0:
		print("       ",end="")
		kongge -= 1  

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

print("<===============>")
# 方向四
i = 9
while i >= 1 :
	kongge = 9 - i
	# 打印空格
	while kongge > 0:
		print("       ",end="")
		kongge -= 1  

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

# 求吉利数字 100 ~ 999 之间 找 111 222 333 123 456 654 321 ... 
"""
// 可以获取一个数高位
%  可以获取一个数低位
baiwei = 345 // 100
shiwei = 345 // 10 % 10
gewei  = 345 % 10
print(gewei)
"""

# 方法一
i = 100
while i <= 999:
	baiwei = i // 100
	shiwei = i // 10 % 10
	gewei = i % 10

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

# 方法二
print("<====>")
i = 100
while i <= 999:
	strvar = str(i)
	# print(strvar, type(strvar))
	gewei = int(strvar[-1])
	shiwei = int(strvar[1])
	baiwei = int(strvar[0])
	if shiwei == gewei  and shiwei == baiwei :
		print(i)
	# 123
	elif shiwei == gewei - 1 and shiwei == baiwei + 1:
		print(i)
	# 987
	elif shiwei == gewei + 1 and shiwei == baiwei - 1:
		print(i)
	
	i +=1

# 方法三
print("<====>")
i = 100
while i <= 999:
	strvar = str(i)
	# print(strvar, type(strvar))
	gewei = int(strvar[-1])
	shiwei = int(strvar[1])
	baiwei = int(strvar[0])

	if 2 * shiwei == gewei + baiwei and (shiwei == gewei + 1 or shiwei == gewei -1 ):
		print(i)
	elif gewei == shiwei and shiwei == baiwei:
		print(i)
	
	i +=1

# 百钱买百鸡
# 公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?
"""
穷举法:把数据拿出来一个一个试
x = [1,2]
y = [3,4]
z = [5,6]
x+y+z = 10
1 + 3 + 5 = 9
1 + 3 + 6 = 10 bingo
1 + 4 + 5 = 10 bingo
1 + 4 + 6 = 11
2 + 3 + 5 = 10 bingo
2 + 3 + 6 = 11
2 + 4 + 5 = 11
2 + 4 + 6 = 12
"""

"""
公鸡 : x  母鸡 : y  小鸡: z
鸡的数量:x + y + z = 100
鸡的价格:5 * x + 3 * y + 1/3*z = 100   
"""

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

请添加图片描述
请添加图片描述
请添加图片描述

2. break_pass_continue的使用

关键字的使用 pass break continue

# pass 过 (代码块中的占位符)
"""
if 20 == 20:
	pass
	
while True:
	pass
"""

# break 终止当前循环 (只能用在循环之中)
# 1 ~ 10 遇到5终止循环
i = 1
while i <= 10:
	print(i)
	if i == 5:
		break
	i +=1
	
	
i = 1
while i <= 3:
	
	j = 1
	while j <=3:
		if j == 2:
			break
		print(i,j)
		j+=1

	i +=1
# 1 1
# 2 1 
# 3 1
"""
if 5 == 5: error
	break
"""

# continue 跳过当前循环,从下一次循环开始
# 打印 1 ~ 10 跳过5
i = 1
while i <= 10:	
	if i == 5:
		# 在跳过之前,因为会终止执行后面的代码,从下一次循环开始
		# 为了避免死循环,手动加1
		i += 1
		continue
	print(i)
	i +=1
	
# 1 ~ 100 打印所有不含有4的数字
# 方法一
print("<============>")
i = 1
while i <= 100:
	strvar = str(i)
	# print(strvar)
	if "4" in strvar:
		i += 1
		continue
	print(i)
	i +=1
	
	
# 方法二
print("<============>")
i = 1
while i <= 100:
	if i // 10 == 4 or i % 10 == 4:
		i+=1
		continue
	print(i)
	i+=1

3. for循环

while: 逻辑比较复杂用while
for: 逻辑比较简单,遍历数据的话一定是for(while也可以遍历数据,但是遍历的数据不能是无序的)

# 遍历 循环 迭代 , 把容器中的元素一个一个获取出来

# while循环在遍历数据时的局限性
"""
lst = [1,2,3,4,5]  # ok
i = 0
while i < len(lst):
	print(lst[i])
	i+=1
	
setvar = {"a","b","c"} # not ok
i = 0
while i < len(setvar):
	print(setvar[i])
	i+=1
"""

# for循环的基本语法
"""
Iterable 可迭代性数据:1.容器类型数据 2.range对象 3.迭代器
for 变量 in Iterable:
	code1.
"""
# 字符串
container = "北京和深圳温差大概20多度"
# 列表
container = [1,2,3,4,4,5]
# 元组
container = ("孙开洗","孙健","孙悟空")
# 集合 
container = {"陈璐","曹静怡","王志国","邓鹏","合力"}
# 字典
container = {"cl":"风流倜傥","cjy":"拳击选手","wzg":"寻花问柳","dp":"帅气,祖国的栋梁","hl":"你是个好人"}

# 遍历数据
for i in container:
	print(i)

print("<===================>")
# 1.遍历不等长多级容器
container = [1,2,3,4,("嗄","234",{"马春配","李虎凌","刘子涛"})]
for i in container:
	# 判断当前元素是否是容器,如果是,进行二次遍历,如果不是,直接打印
	if isinstance(i,tuple):
		# ("嗄","234",{"马春配","李虎凌","刘子涛"})
		for j in i:
			# 判断当前元素是否是集合,如果是,进行三次遍历,如果不是,直接打印
			if isinstance(j,set):
				# j = {"马春配","李虎凌","刘子涛"}
				for k in j :
					print(k)
			else:
				print(j)
				
	# 打印数据
	else:
		print(i)

# 2.遍历不等长多级容器
container = [("刘玉波","历史源","张光旭"), ("上朝气","于朝志"),("韩瑞晓",)]
for i in container:
	for j in i:
		print(j)


# 3.遍历等长的容器
container = [("马云","小马哥","马春配") , ["王健林","王思聪","王志国"],{"王宝强","马蓉","宋小宝"}]
for a,b,c in container:
	print(a,b,c)

# 变量的解包
a,b,c = "poi"
a,b = (1,2)
a,b = 1,2
a,b,c = [10,11,12]
a,b = {"林明辉","家率先"}
a,b = {"lmh":"林明辉","jsx":"家率先"}
a,b,c = ("马云","小马哥","马春配")
print(a,b,c)

# ### range对象
"""
range([开始值,]结束值[,步长])
取头舍尾,结束值本身获取不到,获取到它之前的那一个数据
"""

# range(一个值)
for i in range(5): # 0 ~ 4
	print(i)

# range(二个值)
for i in range(3,8): # 3 4 5 6 7 
	print(i)

# range(三个值) 正向的从左到右
for i in range(1,11,3): # 1 4 7 10 
	print(i)

# range(三个值) 逆向的从右到左
for i in range(10,0,-1): # 10 9 8 7 ... 1 
	print(i)


# 总结:
"""
while 一般用于处理复杂的逻辑关系
for   一般用于迭代数据
部分情况下两个循环可以互相转换;
"""

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()

# 打印 1 ~ 10 跳过5
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)

小提示:


"".strip() 可以去掉字符串的两边的空白符,包括\n
in 不能在纯数字中使用,如果是字典的话判断你的是字典的键
元组不能用while循环来显示,因为内容是无序的

外层是集合,里面不能是列表
lst = [ ["a",1] , {"b","250"}]
dic = dict(lst)
print(dic)    这里可能会输出{'a':1,'b':'250'}或者{'a':1,'250':'b'}

lst = ["a1","b2"]
dic = dict(lst)
print(dic) 这里会输出{a:1,b:2}

lst = ["a11","b22"]
dic = dict(lst)
print(dic)  这里就会报错

isinstancetype用的多


在一个文件中-5 - 正无穷
a = 3
b = 3   
a和b的id是一样
a = b =3 不管是不是-5到正无穷,a和b的id都是一样的

height = int(intput("你身高多少:") )  
字符串为什么不能用int进行强转(字符串是小数的)

help(print) # print的帮助文档

4. 小练习

问题:

1.利用if语句写出猜大小的游戏:
	设定一个理想数字比如:66,
	让用户三次机会猜数字,如果比66大,则显示猜测的结果大了;
	如果比66小,则显示猜测的结果小了;
	只有等于66,显示猜测结果正确,退出循环。
	最多三次都没有猜测正确,退出循环,并显示‘都没猜对,继续努力’。
	
2.使用whilefor 遍历字符串 "IG战队牛逼"
3.使用for循环对s="黄绿青蓝紫"进行循环,每次打印的内容是每个字符加上"色的",	
  例如:黄色的 绿色的 青色的 ... 
4.完成要求:
用户可持续输入(while循环)
	输入A,则显示走大路回家,然后在让用户进一步选择:
		是选择公交车,还是步行?
		选择公交车,显示10分钟到家,并退出整个程序。
		选择步行,显示20分钟到家,并退出整个程序。
	输入B,
		则显示走小路回家,并退出整个程序。
	输入C,
		则显示绕道回家,然后在让用户进一步选择:
		是选择游戏厅玩会,还是网吧?
			选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
			选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。

5.写代码:计算 1 - 2 + 3 - 4 + ... + 99 中除了88以外所有数的总和?
6.(升级题)打印菱形小星星
     *
    ***
   *****
  *******
 *********
***********
***********
 *********
  *******
   *****
    ***
     *
     

答案:

"""
1.利用if语句写出猜大小的游戏:
	设定一个理想数字比如:66,
	让用户三次机会猜数字,如果比66大,则显示猜测的结果大了;
	如果比66小,则显示猜测的结果小了;
	只有等于66,显示猜测结果正确,退出循环。
	最多三次都没有猜测正确,退出循环,并显示‘都没猜对,继续努力’。
"""
"""
times = 1
while times <= 3:
	num = input("请输入一个数字:")
	if num.isdecimal():
		num = int(num)
		if num > 66:
			print("结果大了")
		elif num == 66:
			print("对了 bingo老婶")
			break
		elif num < 66:
			print("结果小了")
	else:
		print("抱歉,数字格式不对~")
	
	if times == 3:
		print("都没猜对,继续努力")
	
	times +=1
"""


# 2.使用while和for 遍历字符串 "IG战队牛逼"
strvar="IG战队牛逼"
i = 0
while i < len(strvar):
	print(strvar[i])
	i +=1
	
for i in strvar:
	print(i)


# 3.使用for循环对s="黄绿青蓝紫"进行循环,每次打印的内容是每个字符加上"色的",	
  # 例如:黄色的 绿色的 青色的 ... 
  
s="黄绿青蓝紫"
for i in s:
	print(i + "色的" )

  
# 4.完成要求:
# 用户可持续输入(while循环)
	# 输入A,则显示走大路回家,然后在让用户进一步选择:
		# 是选择公交车,还是步行?
		# 选择公交车,显示10分钟到家,并退出整个程序。
		# 选择步行,显示20分钟到家,并退出整个程序。
	# 输入B,
		# 则显示走小路回家,并退出整个程序。
	# 输入C,
		# 则显示绕道回家,然后在让用户进一步选择:
		# 是选择游戏厅玩会,还是网吧?
			# 选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
			# 选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。
"""
sign = True
while sign:
	opt = input("请输入选项A,B,C")
	if opt.lower() == "a":
		print("走大路回家")
		opt = input("是选择公交车,还是步行?")
		if opt == "公交车":
			print("10分钟到家,")
			sign = False
			# break
		elif opt == "步行":
			print("20分钟到家")
			sign = False
			# break
			
	elif opt.lower() == "b":
		print("走小路回家")
		break
		
	elif opt.lower() == "c":
		print("绕道回家")
		opt = input("是选择游戏厅玩会,还是网吧?")
		if opt == "游戏厅":
			print("一个半小时到家,爸爸在家,拿棍等你。")
		elif opt == "网吧":
			print("两个小时到家,妈妈已做好了战斗准备。")
"""
		

# 5.写代码:计算 1 - 2 + 3 - 4 + ... + 99 中除了88以外所有数的总和?
total = 0
for i in range(1,100):

	if i == 88:
		continue

	if i % 2 == 1:
		total += i
	elif i%2 == 0:
		total -= i
print(total)

total = 0
i = 1
while i <= 99:
	if i == 88:
		i +=1
		continue

	if i % 2 == 1:
		total += i
	elif i%2 == 0:
		total -= i
	i +=1
print(total)

# 6.(升级题)打印菱形小星星
"""
     *
    ***
   *****
  *******
 *********
***********
***********
 *********
  *******
   *****
    ***
     *
"""

"""
空格 + 星星 + 换行

总行数:
对于任意个星星n ,总行数:  n // 2 + 1
13 -> 7
11 -> 6
9  -> 5
7  -> 4

空格:
对于当前行i , 空格数量 = 总行数 - 当前行 
1 => 5
2 => 4
3 => 3
4 => 2
5 => 1
6 => 0

星星:
对于当前行i , 星星数量 = 2 * 当前行 - 1
1 => 1
2 => 3
3 => 5
4 => 7
"""
# n = int(input("输入星星个数"))
n = 13
hang = n // 2 + 1
i = 1
while i <= hang:
	# 打印空格
	kongge = hang - i
	print(" " * kongge,end="")
	
	# 打印星星 
	xingxing = 2 * i - 1
	print("*" * xingxing,end="")
	
	# 打印换行
	print()
	i += 1

i = hang
while i >= 1:
	# 打印空格
	kongge = hang - i
	print(" " * kongge,end="")
	
	# 打印星星 
	xingxing = 2 * i - 1
	print("*" * xingxing,end="")
	
	# 打印换行
	print()
	i -= 1



# 方法二
n = 11
hang = n // 2 + 1
i = 1
while i <= hang:
	# 打印空格
	kongge = hang - i
	while kongge>0:
		print(" ",end="")
		kongge -= 1
	
	# 打印星星 
	xingxing = 2 * i - 1
	j = 1
	while j <= xingxing:
		print("*" ,end="")
		j += 1
	
	# 打印换行
	print()
	i += 1


i = hang
while i >= 1:
	# 打印空格
	kongge = hang - i
	while kongge>0:
		print(" ",end="")
		kongge -= 1
	
	# 打印星星 
	xingxing = 2 * i - 1
	j = 1
	while j <= xingxing:
		print("*" ,end="")
		j += 1
	
	# 打印换行
	print()
	i -= 1


# (扩展了解)
"""abs 求绝对值的内置函数 abs(-1) = 1"""
print("<===11111==>")
for i in range(-6,7):
	# 只有一句代码的话,可以直接写在冒号的右边;
	if i == 0:continue		
	print(" " * (abs(i) - 1),"*" * (13-2*abs(i)))



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【六】Python全栈之路--for循环 的相关文章

随机推荐

  • pgsql遇到小问题及小功能记录

    一 问题 1 ERROR invalid input syntax for integer 使用COALESCE a delete flag 0 int as delete flag报错 因为delete flag里面包含空值 改为 COA
  • 使用librdkafka的C++接口实现简单的生产者和消费者

    一 编译librdkafka 环境 Fedora 20 32位 依赖 pthreads 必选 zlib 可选 libssl dev 可选 libsasl2 dev 可选 先查看自己的linux上是否安装了pthreads 指令如下 loca
  • 使用arm-none-eabi-gcc编译器搭建STM32的Vscode开发环境

    工具 make Windows中没有make 但是可以通过安装MinGW或者MinGW w64 得到make gcc arm none eabi 建议最新版 防止调试报错 OpenOCD vscode cubeMX VSCODE 插件 Ar
  • mysql auto reconnect_Mysql5的auto Reconnect异常

    mysql5的auto Reconnect错误 最近在一个J2EE项目的开发过程中 遇到了这样的问题 在服务器上部署好这个Web系统后 这时访问系统是很正常的 当把服务器的时间 例如 2008 03 31 加一天或更多天 例如 2008 0
  • 从零开始学习makefile(4)makefile中%、$@、$<、$^的作用

    目录 示例 头文件fun h main cpp fun cpp makefile 与 lt 是通配符 https www quora com What does o cpp in a Makefile mean是这样描述 的作用的 for
  • 求当前数组中,最大值减最小值等于sum的数组个数

    分析 应用双端队列 构造一个可以动态的求出当前数组最大值的容器 qmax 同上在构造一个qmin 从left right等于开始 如果当前区间的qmax qmin符合条件 right向右扩充 当不符合条件时 计算上一步符合条件的所有子数组个
  • SpringBoot+SpringSecurity+Freemarker页面中使用security标签

    SpringBoot SpringSecurity Freemarker项目中在页面上使用security标签控制按钮显示隐藏达到对按钮级权限控制还是比较方便的 如下配置即可 1 引入依赖
  • 【解决】git(1)获取key——git@github.com permission denied (publickey). fatal could not read from remote repo

    Github 拒绝连接 其原因有两个 这是你的私人仓库 repo Github 不信任你的计算机 因为它没有你计算机的公钥 public key 克隆是出现 解决 先看有没有ssh 一般是子这里 C Users xxxx ssh 如果没有打
  • Kafka偏移量(Offset)管理

    1 定义 Kafka中的每个partition都由一系列有序的 不可变的消息组成 这些消息被连续的追加到partition中 partition中的每个消息都有一个连续的序号 用于partition唯一标识一条消息 Offset记录着下一条
  • 【微信小程序】-- 配置uni-app的开发环境(四十八)

    所属专栏 微信小程序开发教程 作 者 我是夜阑的狗 个人简介 一个正在努力学技术的CV工程师 专注基础和实战分享 欢迎咨询 欢迎大家 这里是CSDN 我总结知识的地方 喜欢的话请三连 有问题请私信 文章目录 前言 一 配置uni app的开
  • Android 开发中让BUTTON变漂亮的小技巧

    最近在做android前端的时候 发现系统提供的button实在太过不忍直视 于是搜索了很多其他button的做法 自己也尝试了很多 但是一个一个去查有些麻烦 索性全部记下来 下面介绍几个好用的button设定 android layout
  • 【Yapi】Window10 超详细安装 Yapi 教程

    目录 问题一 Error getaddrinfo ENOTFOUND yapi demo qunar com yapi demo qunar com 80 错误处理 问题二 Npm 安装 Yapi 的时候 想指定安装目录 结果一直提示 EP
  • warning: ISO C++ forbids converting a string constant to 'char*'

    warning ISO C forbids converting a string constant to char Wwrite strings 解决办法 int main int argc char argv char str 先把C
  • sql 时间计算

    兩個時間之差的合計 DECLARE I INT SET I DATEDIFF ms GETDATE RAND 24 GETDATE SELECT convert varchar 10 I 86400000 Days convert varc
  • QT on Android的rtsp播放器demo

    手机 平板
  • 文件导入之Validation校验List对象数组

    背景 我们的接口是一个List对象 对象里面的数据基本都有一些基础数据校验的注解 我们怎么样才能校验这些基础规则呢 我们在导入excel文件进行数据录入的时候 数据录入也有基础的校验规则 这个时候我们又该如何少写代码让Validation框
  • rtthread空闲线程与定时器

    rtthread为什么要用到空闲线程 RT Thread是一个实时操作系统 它的内核采用了基于线程的设计思路 在RT Thread中 空闲线程是一种特殊的线程 它在系统没有其他任务需要执行时会被调度执行 因此 空闲线程的存在可以利用CPU的
  • 动态规划总结

    感谢赵剑波大牛的原稿 转载于http blog sina com cn zhaojianbo0124 第一节 动态规划基本概念一 动态规划三要素 阶段 状态 决策 他们的概念到处都是 我就不多说了 我只说说我对他们的理解 如果把动态规划的求
  • open3d显示RGBD点云(rope3d数据集)

    rope3d中同时有深度图 因此 可以创建rgbd图像点云 借助open3d库 需要确定相机内参和外参 注意统一坐标系 例如都显示在world坐标系 usr bin env python3 coding utf 8 for reading
  • 【六】Python全栈之路--for循环

    文章目录 1 双向循环的练习 2 break pass continue的使用 3 for循环 4 小练习 1 双向循环的练习 1 用两个循环完成十行十列的小星星 j 0 while j lt 10 打印星星 i 0 while i lt