A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学习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循环,这种嵌套能让循环体变得很美。
方法2for循环,配合字符串的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+4y=x-4y=-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("")
代码已经实现了菱形的打印,也是大概的总结了一下打印小星星的方法,很简单,但是用来循环嵌套的方法,以及几何数学的灵活运用,在解决问题方面可以多方面,多角度考虑。
耽误各位宝贵的时间,写的很简陋,希望各位学友能提出宝贵的意见,上述仅仅代表个人看法,不喜勿喷,谢谢。
   

QQ截图20190329005603.png (12.73 KB, 下载次数: 38)

QQ截图20190329005603.png

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马