一.双向循环的经典练习
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
x1 + 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()