day6. while双项循环及for循环
一、双向循环经典练习
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
方式二
print("<=====>")
# 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
5. 99乘法表按方式一纵轴向右折叠
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
6. 99乘法表按方式二纵轴向右折叠
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
7. 求吉利数字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) #
elif shiwei == gewei-1 and shiwei == baiwei+1:
print(i) #
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) #
elif shiwei == gewei-1 and shiwei == baiwei+1:
print(i) #
elif shiwei == gewei+1 and shiwei == baiwei-1:
print(i)
i+=1
8.百钱买百鸡
"""
公鸡x 母鸡y 小鸡z
公鸡1块钱1只,母鸡3块钱一只,小鸡5毛钱一只
问: 用100块钱买100只鸡,有多少种买法?
"""
"""
穷举法:把数拿出来,一个一个试
x{1,2}
y{3,4}
z{5,6}
x+y+z = 10 列出来
1+3+5 = 9 不要
1+3+6 = 10 要
1+4+5 = 10 要
1+4+6 = 11 不要 2 + 3 + 5 = 10 要
2 + 3 + 6 = 11 不要
2 + 4 + 5 = 11 不要
2 + 4 + 6 = 12 不要
""" """
# 两个条件同时满足
x+y+z = 100
x*1 + y*3 + z*0.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
if 10 == 10:
print(123) while True:
pass
三、break 终止当前循环
1、打印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
四、continue 跳过当前循环,从下一次循环开始
1、打印1~10 跳过5
i = 1
while i<=10: if i == 5:
# 需手动自增加1. 当执行continue时,后面的代码不执行,跳到while循环的条件判断处,会造成死循环
i+=1
continue
print(i) i+=1
2、打印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 "" in strvar:
i+=1
continue print(i)
i+=1
五、for 循环
# 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)
1、变量的解包
a,b = 1,2
a,b = [3,4]
a,b = {"a":5,"b":6}
print(a,b)
2、遍历等长的二级容器
container = [("王健林","王思聪","王美丽") , ("马云","马化腾","马生平") , ("王宝强","马蓉","宋小宝") ]
for a,b,c in container:
print(a,b,c)
# a,b,c = ("王健林","王思聪","王美丽")
# a,b,c = ("马云","马化腾","马生平")
# a,b,c = ("王宝强","马蓉","宋小宝")
3、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.利用if语句写出猜大小的游戏:
设定一个理想数字比如:66,
让用户三次机会猜数字,如果比66大,则显示猜测的结果大了;
如果比66小,则显示猜测的结果小了;
只有等于66,显示猜测结果正确,退出循环。
最多三次都没有猜测正确,退出循环,并显示‘都没猜对,继续努力’。 2.使用while循环分别打印字符串s="asdfer"中每个元素 3.使用for循环对s="abcdefg"进行循环,每次打印的内容是每个字符加上sb,
例如:asb, bsb,csb,...gsb。 4.完成要求:
用户可持续输入(while循环)
输入A,则显示走大路回家,然后在让用户进一步选择:
是选择公交车,还是步行?
选择公交车,显示10分钟到家,并退出整个程序。
选择步行,显示20分钟到家,并退出整个程序。
输入B,
则显示走小路回家,并退出整个程序。
输入C,
则显示绕道回家,然后在让用户进一步选择:
是选择游戏厅玩会,还是网吧?
选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。 4.写代码:计算 1 - 2 + 3 - 4 + ... + 99 中除了88以外所有数的总和? 5.(升级题)打印菱形小星星
'''
*
***
*****
*******
*********
***********
***********
*********
*******
*****
***
*
'''
'''
"""
num = 66
times = 1
while times <= 3: num = input("请输入猜测的数字")
if num.isdecimal():
num = int(num)
if num > 66:
print("猜测的结果大了")
elif num < 66:
print("猜测的结果小了")
else:
print("猜对了")
break
else:
print("输入有误") if times == 3:
print("都没猜对,继续努力") times +=1
""" """
num = 66
times = 1
sign = True
while sign: num = input("请输入猜测的数字")
if num.isdecimal():
num = int(num)
if num > 66:
print("猜测的结果大了")
elif num < 66:
print("猜测的结果小了")
else:
print("猜对了")
break
else:
print("输入有误") if times == 3:
print("都没猜对,继续努力")
sign = False times +=1
"""
1
# 2.使用while循环分别打印字符串s="asdfer"中每个元素
s="asdfer"
i = 0
while i < len(s):
print(s[i])
i+=1
2
# 3.使用for循环对s="abcdefg"进行循环,每次打印的内容是每个字符加上sb,
# 例如:asb, bsb,csb,...gsb。
s = "abcdefg"
for i in s:
print(i + "sb")
3
"""
4.完成要求:
用户可持续输入(while循环)
输入A,则显示走大路回家,然后在让用户进一步选择:
是选择公交车,还是步行?
选择公交车,显示10分钟到家,并退出整个程序。
选择步行,显示20分钟到家,并退出整个程序。
输入B,
则显示走小路回家,并退出整个程序。
输入C,
则显示绕道回家,然后在让用户进一步选择:
是选择游戏厅玩会,还是网吧?
选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。’并让其重新输入A,B,C选项。
选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。’并让其重新输入A,B,C选项。
"""
"""
sign = True
while sign:
choice = input("请输入A,B,C选项")
if choice.upper() == "A":
choice2 = input("是选择公交车,还是步行?")
if choice2 == "公交车":
print("10分钟到家")
break
elif choice2 == "步行":
print("20分钟到家")
break elif choice.upper() == "B":
print("走小路回家")
break
elif choice.upper() == "C":
print("绕道回家")
choice = input("是选择游戏厅玩会,还是网吧?")
if choice == "游戏厅":
print("一个半小时到家,爸爸在家,拿棍等你。")
elif choice == "网吧":
print("两个小时到家,妈妈已做好了战斗准备。")
"""
4
i = 1
total = 0
while i < 100: if i == 88:
i+=1
continue if i % 2 == 0:
total -= i
else:
total += i
i+=1 print(total) total = 0
for i in range(1,100):
if i == 88 :
continue
if i % 2 == 0:
total -= i
else:
total += i
print(total)
4
'''
*
***
*****
*******
*********
*********** ***********
*********
*******
*****
***
*
''' """
n = 11
13 => 7
11 => 6
9 => 5
... n => n // 2 + 1
星星 和 行数之间的关系 hang = n // 2 + 1 1 => 5
2 => 4
3 => 3
4 => 2
5 => 1
6 => 0 当前行i 和 空格之间的关系 kongge = hang - i
空格数 = 总行数 - 当前行 1 -> 1
2 -> 3
3 -> 5
4 -> 7
5 -> 9 当前行i 和 星星之间的关系 xingxing = 2*i - 1 """
n = 13
hang = n // 2 + 1
i = 1
while i <= hang: # 1 ~ 6
# 打印空格
print(" " *(hang - i),end="" ) # 打印星星
print("*" * (2*i - 1),end="") # 打印换行
print()
i+=1 i = hang
while i > 0:
# 打印空格
print(" " *(hang - i),end="" ) # 打印星星
print("*" * (2*i - 1),end="") # 打印换行
print()
i-=1 n = 11
hang = n // 2 + 1
i = 1
while i <= hang: # 1 ~ 6
# 打印空格
k = hang - i
while k>0:
print(" ",end="")
k-=1 # 打印星星
xingxing = 2*i - 1
j = 1
while j <=xingxing:
print("*",end="")
j+=1 # 打印换行
print()
i+=1 i = hang
while i > 0:
# 打印空格
k = hang - i
while k>0:
print(" ",end="")
k-=1 # 打印星星
xingxing = 2*i - 1
j = 1
while j <=xingxing:
print("*",end="")
j+=1 # 打印换行
print()
i-=1 print(abs(-1)) # 6 5 4 3 2 1 1 2 3 4 5 6
#
# abs(-6) = 6 """
# 行数和空格之间的关系
-6 -> 5
-5 -> 4
-4 -> 3
-3 -> 2
-2 -> 1
-1 -> 0
0 -> 跳过 # 行数 和 星星之间的关系
n = 11
-6 -> 1
-5 -> 3
-4 -> 5 13 - abs(i) * 2
13 - 12 = 1
13 - 10 = 3
13 - 8 = 5
""" # abs用来算绝对值
n = 29
hang = n // 2 + 1 for i in range(-hang,hang+1): if i == 0:
continue # 打印空格
print(" " * (abs(i)-1) , end="")
# 打印星星
print("*" * (n+2 - abs(i) * 2) )
5
day6. while双项循环及for循环的更多相关文章
- [Leetcode]双项队列解决滑动窗口最大值难题
这道题是从优先队列的难题里面找到的一个题目.可是解法并不是优先队列,而是双项队列deque 其实只要知道思路,这一道题直接写没有太大的问题.我们看看题 给定一个数组 nums,有一个大小为 k 的滑动 ...
- C# foreach循环较for循环的优势与劣势
一.foreach循环的优势 C#支持foreach关键字,foreach在处理集合和数组相对于for存在以下几个优势: 1.foreach语句简洁 2.效率比for要高(C#是强类型检查,for循环 ...
- what's the python之if判断、while循环以及for循环
Python缩进原则 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进 同一级别的代码,缩进必须一致 官方建议缩进用4个空格 Python程序语言指定任何非0和非空的布 ...
- python 循环高级用法 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if condition] ]按照从左至右的顺序,分别是外层循环到内层循环
高级语法 除了像上面介绍的 [x ** 2 for x in L] 这种基本语法之外,列表推导式还有一些高级的扩展. 4.1. 带有if语句 我们可以在 for 语句后面跟上一个 if 判断语句,用于 ...
- 分支结构,for循环,while循环,跳出循环
#流程控制 概念:通过规定的语句让程序代码有条件的按照一定的方 式执行 顺序结构 按照书写顺序来执行,是程序中最基本的流程结构 选择结构(分支结构.条件结构) 分支结构 单路分支:if(执行的条件){ ...
- sqlserver中的循环遍历(普通循环和游标循环)
sql 经常用到循环,下面介绍一下普通循环和游标循环 1.首先需要一个测试表数据Student
- while 循环 于 for循环语句
while 循环 while 循环 while 条件: 如果条件是真的,就继续的循环 如果条件是假的,就停止循环 循环的意思就是让程序重复地执行某些语句,whiler循环就是循环结构的一种,当事先不知 ...
- bzoj2765[JLOI2010]铁人双项比赛
题意:铁人双项比赛由长跑和骑自行车组成,参赛选手必须先完成k公里的长跑,然后完成r公里的骑车,才能到达终点.参赛选手有的擅长长跑,有的擅长骑车. 如果总赛程s=k+r一定,那么K越大,对擅长长跑的选手 ...
- 1. while循环(当循环) 2. do{}while()循环 3. switch cose(多选一) 例子:当选循环下求百鸡百钱 用 switch cose人机剪刀石头布
1. while循环: 当选循环下求百鸡百钱:如下: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN ...
随机推荐
- Python 最强 IDE 详细使用指南!
PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家.作 ...
- Hyperledger Fabric 2.1 搭建教程
Hyperledger Fabric 2.1 搭建教程 环境准备 版本 Ubuntu 18.04 go 1.14.4 fabric 2.1 fabric-sample v1.4.4 nodejs 12 ...
- 午间邂逅 | post 和 get 的兄弟情深
前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 Github 博客 学习导图: image-20200710142453734 image-202007101431049 ...
- keyring源码加密解密函数分析
Encrypt the page data contents. Page type can't be FIL_PAGE_ENCRYPTED, FIL_PAGE_COMPRESSED_AND_ENCRY ...
- 【Nginx】如何配置Nginx日志?这是最全面的一篇了!!
写在前面 日志对于统计排错来说非常有利的.本文总结了 Nginx 日志相关的配置如 access_log. log_format.open_log_file_cache. log_not_found. ...
- 微信小程序开发(一)基础知识学习
1.特点: ①无DOM对象(虚拟DOM),一切基于组件化(复用.解耦) ②四个重要文件: *.js.*.wxml --> html..wxss --> css.*.json ③无需下载 ...
- node的async模块
废话不多说,直接开始 这个模块有几种方法.分别用于的不通的情况自己喜欢怎么用就怎么用 第一个方法,series 这个方法用于串行切无关联.什么意思那就是,里面的方法是一个一个执行的,每一个方法相互不 ...
- 数据页结构 .InnoDb行格式、以及索引底层原理分析
局部性原理 局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中. 首先要明白局部性原理能解决的是什么问题,也就是主存容量远远比缓存大, CP ...
- pandas之数值计算与统计
数值计算与统计 对于DataFrame来说,求和.最大.最小.平均等统计方法,默认是按列进行统计,即axis = 0,如果添加参数axis = 1则会按照行进行统计. 如果存在空值,在统计时默认会忽略 ...
- Salt组件(二)
四.配置管理States 是SaltStack中的配置语言,在日常进行配置管理时需要编写大量的States文件.比如我们需要安装一个包,然后管理一个配置文件,最后保证某个服务正常运行.这里就需要我们编 ...