python编程思维代码_何为编程思维?看完这篇Python画圈代码解剖,你应该懂了

个人认为:编程就是一个把思维逻辑用计算机特定语言(譬如:Python)实现的过程,即编程的本质是思维,计算机语言是工具。

本篇的主题就是想通过解剖Python如何画多个同心圆的案例,尽量把自己对编程思维的理解准确地呈现出来,期望可以起到抛砖引玉的效果。

94cad1c8a786c91753caaf22d2d9dcca39c757cd.jpeg?token=5c19cd5f0890c511ca4431968fdca5df&s=BA85A54C3E77A6CC1098701C030050C8

问1:需要引入Python哪个模块?

答:一般涉及到画圈都是要用到俗称“小海龟”的turtle模块,调用其里面的划线、画圈方法。

import turtle as tl # 引用turtle并命名为别名

问2:现实中画圈要用到笔的,turtle应该也有调用笔的方法吧?

答:有的,所以需要为其“笔”创建一个对象,犹如笔需要被手握。

t = tl.Pen() #将画笔创建一个对象,后续用它来划线、画圈

问3:笔有了,可以尝试来画个圈。会用到Python提供的什么方法呢?

答:圈的英文单词是circle,Python很人性化的用这个单词定义画圈方法。

t.circle(30) # 三个参数,此处只用到半径,并设半径为30

95eef01f3a292df55e498acba6d5f06536a8734b.jpeg?token=afeac4c97a27718f7edf5af94280c214&s=7DA8347213724C2158D531CA0000C0B2画圈案例

问4:上图的圈是默认的灰色,而且线条也比较细。是否可以自己设置线条颜色与粗细呢?

答:没问题的,Python贴心提供了对应的方法。考虑到要画同心圆,所以颜色尽量丰富些,用列表来定义用到的颜色吧。

tl.width(3) # 设置线条宽度tColorList = ['red','blue','black','yellow'] # 定义四种线条颜色t.color(tColorList[0]) # 选择red

64380cd7912397dd7c666a5242661eb2d1a287b7.jpeg?token=befdb8b62b8c74d43b7b650fd7225edc&s=1C287C32135A4C695CD531CA0000D0B2设置圈的线条粗细与颜色案例

问5:尝试画第二圈,但它的圆心是否就是第一个圈的圆心呢?

答:是不是,先动手画出来再看。要使第二个圈包围第一个圈,当然要扩大半径的。

t.color(tColorList[1]) # 选择bluet.circle(50) # 第二个圈

d52a2834349b033be0881a800e2a9ad6d439bd56.jpeg?token=baf3a2a99b76fbf2475234034269853b&s=19843C720B0267645CF5D5CA0000E0B2第二个圈

问6:上图实现了第二个圈包围第一个圈,但圆心不在同一位置。此时考虑的当然是要移动笔了,使两个圈圆心同位置。Python是否有移动笔的功能?

答:有的,并且很贴心地用goto这个单词来命名方法。此时需要做的是第一个圈箭头位置向下移动20就能达到目的。把第一个圈箭头位置是做X轴与Y轴交叉点(原点),则只是向Y轴负轴移动20。

t.goto(0,-20) # 第一个圈箭头位置向下移动20

dbb44aed2e738bd45647e251ba6f2bd3267ff952.jpeg?token=a227e5f0e91b67181a2c96a21bcb5c9e&s=49843D722B075E4B4A48C4DE0000A0B2两个同心圆案例

问7:找规律。相邻的两个圈半径相差20,则需要在上一个圈箭头位置向Y轴负轴方向移动20?

答:我们可以再画3个圈验证下。

t.color(tColorList[2]) # 选择blackt.goto(0,-40) # 第一个圈箭头位置向下移动40t.circle(70) # 第三个圈t.color(tColorList[3]) # 选择yellowt.goto(0,-60) # 第一个圈箭头位置向下移动60t.circle(90) # 第四个圈t.color(tColorList[0]) # 选择bluet.goto(0,-80) # 第一个圈箭头位置向下移动80t.circle(110) # 第五个圈

f9198618367adab4dc089c8291301f198501e405.jpeg?token=430312bd83bbd946695d5f3b700fb832&s=58A43C72111B606D5E7C14CE000090B2找规律案例

结论:存在规律,即每增加一个同心圈则离原点往Y轴负轴方向移动20。

问8:看上图可以发现,移动画笔会留下一条轨迹(将所有圈连接起来的线)。是否存在控制移动画笔时不划线呢?

答:Python的强大在于真正与现实生活逻辑的吻合度特别高,提供了提起画笔再移动,到达目的地后放下画笔继续画圈功能。代码示例(其他圈类似):

t.color(tColorList[1]) # 选择bluet.penup() # 提起笔t.goto(0,-20) # 第一个圈箭头位置向下移动20t.pendown() # 放下笔t.circle(50) # 第二个圈

f11f3a292df5e0fed5203969478498ad5fdf7283.jpeg?token=04e0dfc4f4ddc757c6b38cd24d6bf9e7&s=58A83C72111B606D5C7454CE0000E0B2去掉移动画笔的痕迹案例

问9:规律也找到了,但如果要画的同心圈个数成千上百,我们不可能每个圈用四段代码。所以,必须要引入循环语句。该如何设置变量?如何控制结束循环条件?如何设置颜色?

答:采用For循环的方式来实现。

import turtle as tl # 引用turtle并命名为别名t = tl.Pen() #将画笔创建一个对象,后续用它来划线、画圈t.width(3) # 设置线条宽度\tColorList = ['red','blue','black','yellow'] # 定义四种线条颜色\for i in range(20): # 画20个同心圈t.color(tColorList[i%4]) # 设置线条颜色 t.penup() # 提起笔 t.goto(0,-20*i) # 第一个圈箭头位置向下移动-20*i t.pendown() # 放下笔 t.circle(30+20*i) # 第i+1个圈 i += 1 # 控制循环趋近结束条件

6c224f4a20a4462346f4b58f83c6de0b0df3d70e.jpeg?token=5193c3207c2cd8aac7d12ccd4237c17f&s=8452753393BBDDCC1E75F0DA0200A0B2循环画多个同心圈的效果图

【注】:改变range()的参数就能改变同心圈的个数。

问10:如果自己执行过这段代码,就会发现一个效率问题,即随着通圈的个数增加,程序执行的耗时太长。是否可以提升执行效率呢?

答:调用Python的一个方法speed(),上例中For循环前增加下面一段代码,立马解决该问题。

t.speed(0) # 设置速度,0表示最快

902397dda144ad34cc68a3c5cb46a0f133ad8582.jpeg?token=032f2fb631aa31a23dbd638fda450d74&s=F752E53393BFC9CC5EDDF0DA0200F0B2同心圈最终效果图

总结

个人认为编程思维的最重要的两点:

1、要与问问的观念,并要善于问问题;

2、问题间逐次递进且逻辑关联性强。

48540923dd54564e079b9631a83a3087d0584f21.jpeg?token=878a0586ba2d0b09c339a899db3defd1&s=1D2055320F724C01524130DE000050B0

结语

编程语言的学习就是一个多练习的过程。在不停地敲代码过程中理解Python精义,在理解的过程中又用敲代码的方式来解答与验证自己的疑问点,逐渐巩固自己对Python这门语言的理解,直至掌握,无捷径可走。思维是编程的基础,也是可以通过编程提高思维能力。

bba1cd11728b4710665ee9e7d82a6ff8fd032395.jpeg?token=f26c250a24cd7ead567c598946f9d448&s=4B2C3062CBD869E90E7858C40000E0B2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值