目录
- 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 += 1NuDgNdX # 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 #www.cppcns.com 打印换行 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 =NuDgNdX 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 = dictNuDgNdX(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): # 只有一www.cppcns.com句代码的话,可以直接写在冒号的右边; if i == 0:continue print(" " * (abs(i) - 1),"*" * (13-2*abs(i)))
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!
精彩评论