Python全栈之for循环
短信预约 -IT技能 免费直播动态提醒
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)))
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341