总结用python绘制正多边形的规律?

Python027

总结用python绘制正多边形的规律?,第1张

如果能够找到规律,可以让代码变得更简单。上述代码中其实就是调用circle()函数四次,每次传入参数不同而已。

我们可以加入循环,循环就是重复不停地做相同的事情;再找到循环变量和画圆参数之间的规律即可。

第一个圆的半径为50,每次按15的节奏递减,直到绘制完半径为5的圆。这样就可以使用range()函数,传入如下参数:range(50,0,-15)。

或者由小到大绘制,传入这样的参数也可以:range(5,51,15)。

还可以这样:循环四次,循环变量i依次为0、1、2、3,再在绘制圆的过程中构造递减的表达式:100/2-i*15。

分析这个表达式,当i等于0时,结果为50,绘制半径为50的圆;当i等于1时,结果为35,绘制半径为35的圆……正好符合题目要求的参数值。

【扩展】思考如何绘制以坐标原点为中心的同心圆呢?

仔细观察画笔绘制圆的轨迹,可发现:默认小海龟从坐标原点出发,逆时针旋转一圈画圆;然后,再回到起始点。

所以,绘制同心圆。我们需要将画笔向下移动一定的距离,即改变y的坐标,x坐标保持不变为0。参考代码如下:

循环体内,每次需要抬笔和落笔功能。

02

案例二:绘制一个正多边形

绘制正多边形有这样一个结论:用360°去除以绘制的边数,即可得到旋转角度。

比如:正三角形的旋转角度(360/3=120°)、正四边形的旋转角度(360/4=90°)、正八边形的旋转角度(360/8=45°)。其他以此类推。

那么,我们要绘制一个正八边形呢?

使用循环结构,循环八次。每次前移一定距离,再旋转(360/边数)的角度,这里旋转的就是45°角。参考代码如下:

有了这样的结论,其他的正多边形都可以信手拈来,小菜一碟了。只需要稍微改几个参数即可。

03

案例三:绘制由多种颜色组成的正螺旋线

比如,这样的图形:

这是由八种颜色组成的正八边形螺旋线结构图,颜色依次为:红(red)、绿(green)、蓝(blue)、黄(yellow)、紫(purple)、橙(orange)、黑(black)、粉(pink)等八种。

绘制思路:

首先,需要创建一个颜色列表list,含有八种颜色元素。

第二,前移一定距离,这个距离值是由小到大逐级递增的过程。

第三,旋转一定角度,可参照案例二的结论。

最后,考虑画笔的颜色,每8次(边数)为一个周期循环颜色列表。

参考代码如下:

其他的正螺旋线,也是如此规律。

【扩展】如果是有一定旋转角度的螺旋线呢?比如,这样的图形:

解题思路:只需要在正螺旋线的基础上,让旋转角度多偏移1-2°即可。修改上述案例中最后一行的代码:

【请问是什么书里有这道题目?麻烦提供书名和作者,感谢】

第1个代码:

for i in range(0,4):

    for j in range(0,7):

        print("*",end="")

    print()

说明:

内循环用变量 j,每行打印7个*:

即:当j=0时,打印第1个 *,j=1时,打印第2个 *,......, j=6时,打印第7个*。

外循环用变量 i,一共打印4行:

即:当i=0时,打印第1行7个*,i=1时,打印第2行7个*,......, i=3时,打印第4行7个*。

输出结果:

*******

*******

*******

*******

第2个代码:

for i in range(1,8,2):

    for j in range(i):

        print("*",end="")

    print()

说明:

i=1时,j循环range(1),打印1个*;

i=3时,j循环range(3),打印3个*;

i=5时,j循环range(5),打印5个*.......

输出结果:

*

***

*****

*******

第3个代码:

for i in range(1,8,2):

    print(int((7-i)/2)*" ",end="")

    for j in range(i):

        print("*",end="")

    print()

说明:

要在每一行的*前面打印空格,空格的循环并不是在内循环中,因为如果在*号打印中混合空格,会出现一个*号一个空格的输出错误。所以空格循环应在外循环中,根据行数的打印而进行循环增加。

输出结果:

   *

  ***

 *****

*******

第4个代码直接写在第6个代码中。

第6个代码:

for i in range(1,8,2):

    print(int((7-i)/2)*" ",end="")

    for j in range(i):

        print("*",end="")

    print()

 for i in range(5,0,-2):

    print(int((7-i)/2)*" ",end="")

    for j in range(i):

        print("*",end="")

    print()

说明:

在第3个代码中,增加依次递减。

输出结果:

   *

  ***

 *****

*******

 *****

  ***

   *

第5个代码:

for i in range(1,8,2):

    for j in range(i):

        print("*",end="")

    print()

for i in range(5,0,-2): 

    for j in range(i):

        print("*",end="")

    print()

说明:

同代码2,只是增加下方的递减循环打印。

输出结果:

*

***

*****

*******

*****

***

*

python 循环语句:

while 判断条件(condition):

执行语句(statements)……

执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。

当判断条件假 false 时,循环结束。

Python语言风格简介:

Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。

对于一个特定的问题,只要有一种最好的方法来解决就好。这在由Tim Peters写的Python格言里面表述为:There should be one-- and preferably only one --obvious way to do it. 这正好和Perl语言的中心思想TMTOWTDI完全相反。

Python的作者有意的设计限制性很强的语法,使得不好的编程习惯都不能通过编译。其中很重要的一项就是Python的缩进规则。