目录
  • 1. 双向循环的练习
  • 2. break_pass_continue的使用
  • 3. for循环
    • 小提示:
  • 4. 小练习
    • 问题:
    • 答案:
  • 总结

    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)  这里就会报错
    isinstance比type用的多
    
    在一个文件中-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.使用while和for 遍历字符串 "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)))
    
    

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!