python shape函数_青少年编程:用Python探究数学(4)

c8bdb303866d10f7b38be06a78e8a234.gif

经过前面的学习,你已经对编程有了一点了解,本节我们要更进一步:写个函数。

在初中数学中,有对函数的详细解释,此处不赘述。

对于Python里面的函数,有自己的独特定义方法。

还是打开myturtle.py文件,将其中的代码修改为:

from turtle import *

shape("turtle")

def polygon():
    for i in range(4):
        forward(100)
        right(90)

polygon()

上面代码中的第1、3行没有变化,请读者注意的是第5行,这一行开始定义一个函数:

  • def是Python中定义函数的关键词,看到它就意味着现在要开始写一个函数了。
  • polygon是当前所定义的函数的名字,一般用小写字母表示。
  • ()这个括号里面应该写函数的参数,现在我们暂时不写参数,但是括号还是要写上,不能不写。

注意第6行到第8行,就是我们已经熟悉的绘制正方形的程序——前面使用过的,放到了这里,但是,注意第6行,相对函数左侧要有四个空格的缩进,后面各行依次缩进。这样,用缩进的方式就表示第6行到第8行,是当前函数polygon的代码块,只有在调用这个函数的时候,这部分代码才被执行。

如何调用这个函数?第10行,就是调用这个函数。

F5键执行此文件,同样画出了那个正方形——请读者自行调试。

上面这个函数好像也没有显示出什么特别,就是把原有的代码“打包”放到函数里面了,能不能让函数更灵活一些呢?

那就继续修改。

from turtle import *

shape("turtle")

def polygon(side):
    for i in range(4):
        forward(side)
        right(90)

polygon()

这次修改了第5行和第7行:

  • 第5行中增加了一个参数side,它表示多边形的边长
  • 第7行就要使用这个参数,当调用这个函数的时候,就按照该参数的值绘制多边形。

如果完成了上述修改,就执行此文件,会出现如下情况:

Traceback (most recent call last):
  File "/Users/qiwsir/Documents/Codes/mathadventure/myturtle.py", line 16, in 
    polygon()
TypeError: polygon() missing 1 required positional argument: 'side'

报错的原因是,我们所调用的函数polygon已经有参数了,不能再如同原来那样调用。

修改如下:

from turtle import *

shape("turtle")

def polygon(side):
    for i in range(4):
        forward(side)
        right(90)

polygon(100)
polygon(50)
polygon(25)

上面修改之后的文件中,连续三次调用polygon函数,但是参数不同,也就是要按照三个不同的边长绘制正方形。

95af7274f4e1e9dd5f08e9dd4bcb4464.png

从上面的执行效果中,可以看到函数的一个好处,那就是避免了同样代码的重复。如果按照以往的做法,我们分别画不同边长的多边形,需要将第6行到第8行的代码重复若干遍,但是,现在只需要调用若干次该函数即可。

函数中的参数最多可以多少个?理论上是没有个数限制的,但是,太多了有点麻烦。不过,在画多边形的这个示例中,根据前面的学习,我们知道,至少还可以设置多边形的边数。

于是乎这个函数还可以这么写。

from turtle import *

shape("turtle")
n = input("请输入多边形的边数:")
length = input("请输入多边形的边长:")

def polygon(side, n):
    alpha = 360 / n
    for i in range(n):
        forward(side)
        right(alpha)

polygon(int(length), int(n))

第4、5行,还是通过键盘获得用户输入的多边形边数和编程。

第7行,在定义函数的时候,有两个参数,side代表边长,n代表边的个数。

第8行,计算海龟转过的角度。后面的程序就好理解了。

第13行,调用函数的时候要特别注意:

  • int(length)int(n)是按照位置顺序向函数polygon提供的两个参数,即int(length)对应sideint(n)对应n
  • 并且,同时将用函数input获得到的两个数据转化为了整数类型。

下面图示显示的是执行过程和输出结果。

28927ad581a2f80a0f99465b1f6ec6e3.png
a2d4b056cc60b9f65370d35ce0ef2b18.png

是不是越来越感受到函数的特点了?

如果把我们已经学习过的循环语句结合起来,还能看到更酷炫的结果。

from turtle import *

shape("turtle")

def polygon(side, n):
    alpha = 360 / n
    for i in range(n):
        forward(side)
        right(alpha)

for side in range(10, 50, 10):
    for n in range(3, 10):
        polygon(side, n)

这段程序的执行时间稍微长一些,小海龟要跑好多圈——多少?能推算出来么?

并且,读者是否可以理解第11行到第13行的代码?结合前面已经学习过的知识。

代码的执行效果如下图所示:

99e1325fdccfd54f0fb54385500fd7ab.png

关于代码的理解,留给读者研究了。


专注于软件和AI的公众号

老齐教室

f9be9d68aea6f79631bac74a95c23771.png

觉得好看,就点这里???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值