如何让海龟函数计算绘制的总长度值?

问题描述

所以我需要我的海龟在用户点击屏幕的地方绘制任何正多边形 并打印出他们绘制的多边形的总长度。

import turtle
t=turtle.Turtle()
tlength=0

def figure(num,length):       
    for i in range(num):
        t.forward(length)
        t.left(360/num)
        global tlength
        tlength = tlength+length

        
def drawit(x,y):              
    shape = int(turtle.textinput("","What Shape?"))

    if shape!="0":
        length = int(turtle.textinput("","The length of side? "))
       
    
    t.penup()
    t.goto(x,y)
    t.pendown()
    figure(shape,length)
    t.write("total drawn length=",tlength)

s = turtle.Screen()
s.onscreenclick(drawit)

这是我目前所拥有的。它运行良好,但不会打印出总长度。有什么建议吗?

解决方法

您有一些代码问题:

t.write("total drawn length=",tlength)

这不会起作用,因为 write() 不需要显示多个参数,而只需要一个。检查文档。

shape = int(...)

if shape != "0":

您只是将 shape 强制为 int,然后测试它是否不是字符串 - 这将始终为真。此外,如果用户点击“取消”并且 int() 返回 textinput()None 调用将失败。

tlength=0

这只会初始化一次,因此任何后续多边形都会将前一个多边形的周长添加到它们的总长度中。

这是您的程序的返工,它修复了上述大部分问题并且基本有效:

from turtle import Screen,Turtle

def figure(sides,length):
    perimeter = 0

    for _ in range(sides):
        turtle.forward(length)
        perimeter += length

        turtle.left(360 / sides)

    return perimeter

def drawit(x,y):
    shape = screen.textinput("","How many sides?")

    if not shape:
        return

    length = screen.textinput("","The length of one side?")

    if not length:
        return

    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()

    total_length = figure(int(shape),int(length))
    turtle.write("Total drawn length = " + str(total_length))

turtle = Turtle()
turtle.hideturtle()

screen = Screen()
screen.onscreenclick(drawit)
screen.mainloop()