学习python也有一段时间了,学习的东西也不少了,就这段时间学习的循环语句,发点学习的记录,并举一个打印小星星的列子,用来总结一下。 Python中循环主要有while循环,for 循环,通过循环间的嵌套,使得循环语句变得丰富多彩。 while 循环的基本格式: while 条件(判断 计数器 是否达到 目标次数): 条件满足时,处理的循环体 处理条件(计数器 + 1) for循环的基本格式: for 变量 in 集合: 循环体代码 else: 没有通过 break 退出循环,循环结束后,会执行的代码 在循环体中,最常用的两个关键词,break和continue ,这针对当前循环体有效,也就是说,一个break只能打破一个循环。某一条件满足时,退出循环,不再执行后续重复的代码,用break。某一条件满足时,不执行后续重复的代码时,用关键词continue。使用循环时,通过改变处理条件,避免死循环。 下面就以打印星星为例,使用循环语句进行实现。 例:打印菱形的星星 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
方法1.while循环的嵌套实现菱形打印 分析:星星有9行,需要定义行计数器,作为外部循环 row = 1 # 行初始值设为1,方便计数 while row <= 5: # 分析可以得到,前五行星星个数与行的关系为 2*row -1,在内部有小循环,打印(2*row-1)个小星星 # 每行星星第一个前,空了5-row个空格 col =1 # 定义列的计数器,初始值也为1 whilecol <= (2*row - 1): if col == 1: # 这里是判断是不是每行的第一个小星星,要在第一个之前打印空格 print(" " * (5-row), end="") # end=“ ”,是保证每个小星星不换行,print函数默认换行 print("*", end="") col += 1 row+= 1 # 这里print是外圈循环的换行 print("") # 打印完上半部分的的星星 row = 6 while 5 < row <= 9: # 此时,星星数目与行的关系,9-(row-5)*2 col =1 whilecol <= (9-(row-5)*2): if col == 1: print(" " * (row - 5), end="") print("*", end="") col += 1 row+= 1 # 外部换行 print("") # 下半部分打印完成这里用了2次while循环,每个while循环中嵌套了while循环,这种嵌套能让循环体变得很美。 方法2:for循环,配合字符串的center方法 for rowin range(1, 10): # 先对行进行遍历,也就是9行,range()左闭右开,不能取到10. # 判断,前五行,行数与每行星星个数为2*row -1 if row <= 5: # 星星个数输出的是字符串,可以用center方法将字符串居中,用英文空格填充,center方法的两个参数分别为指定的宽度,以及填充的内容,为了方便,选取宽度为9,空白字符填充。 print(("*" * (2 * row -1)).center(9, " ")) if row > 5: # 后五行星星与行的关系为9-(row-5)*2 print(("*" * (9 - (row - 5) *2)).center(9, " ")) # 即可完成菱形打印 方法3.几何方法切割出菱形 如图,可以把菱形放到直角坐标系中,中心即为原点。可以轻易看出x为从(-4,4) y为(-4,4)范围,然后用y=x+4,y=x-4,y=-x+4,以及y=-x-4四条之间包围起来的部分,就是目标区域。经过简单的数学分析,只要在由|x|=4与|y|=4围起的这块区域取出目标区域即可。 每一个点,都是由点x,y组成,只要满足点在直线内部这样的关系,就可以顺利切割。 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg 代码入下: for x in range(-4, 5): for yin range(-4, 5): # 这样就可以组成一个点的集合,区域为|x|<= 4 , | y | <=4。 # 判断满足的范围 if (y <= x + 4 and y >= x - 4 and y >= -x - 4 and y <= -x + 4): # 满足条件,就打印星星,并且内部星星不换行 print("*", end="") # 不满足的全部打印空白字符 else: print("", end=" ") # 控制换行 print("") 代码的简化,根据数学关系,目标区域其实就是x的绝对值加y的绝对值小于等于4,即满足上述的目标条件。 因此,可以把if后面的条件语句改为 abs(x)+abs(y) <= 4: 其他不变,在代码编写前,只需导入math包即可 import math 具体代码为: import math for x in range(-4, 5): for y in range(-4, 5): if abs(x) + abs(y) <= 4: print("*",end="") else: print("", end="") print("") 代码已经实现了菱形的打印,也是大概的总结了一下打印小星星的方法,很简单,但是用来循环嵌套的方法,以及几何数学的灵活运用,在解决问题方面可以多方面,多角度考虑。 耽误各位宝贵的时间,写的很简陋,希望各位学友能提出宝贵的意见,上述仅仅代表个人看法,不喜勿喷,谢谢。
|