【问题标题】:'Turtle' object has no attribute 'done' as well as code freezes'Turtle' 对象没有属性 'done' 以及代码冻结
【发布时间】:2019-06-16 21:25:49
【问题描述】:

我遇到了一个练习,我不知道该怎么做。

练习:

编写一个名为 Triangle1 的函数,该函数将三个整数作为输入变量,并根据您是否可以从具有给定长度的边形成三角形来打印“是”或“否”。另外,我需要“使用 python turtle 形成三角形,海龟根据给定的边创建角度”。

这是我迄今为止尝试过的。但是,我经常收到与未以某种方式定义的龟的一部分有关的错误:

AttributeError: 'Turtle' object has no attribute 'done'

或让进程以退出代码 0 结束。 我认为这可能与使用特定程序有关,但我似乎无法弄清楚如何解决此问题。

from math import *
import turtle


def draw_triangle(board, angles, sides):
  A, B, C = angles
  a, b, c = sides
  # draw side a
  board.forward(a)
  # Change direction and draw side b
  board.left(180-C)
  board.forward(b)
  # Change direction and draw side c
  board.left(180-A)
  board.forward(c)

  board.done()

def main():
  board = turtle.Turtle()

  a = (int(input("Enter a value for a:")))
  b = (int(input("Enter a value for b:")))
  c = (int(input("Enter a value for c:")))

  if a+b > c and b+c > a and a + c > b:
      print("Those ARE valid sides of a triangle")
  else:
      print("Those ARE NOT valid sides of a triangle")

  A = degrees(acos((a**2+b**2-c**2)/(2.0*a*b)))
  B = degrees(acos((b**2+c**2-a**2)/(2.0*b*c)))
  C = degrees(acos((c**2+a**2-b**2)/(2.0*a*c)))

  draw_triangle(board, [A, B, C], [a, b, c])

main()

我希望代码的输出能够绘制一个根据用户输入的边长改变角度的三角形。

【问题讨论】:

  • 请显示堆栈跟踪。另外,您的模块是否命名为turtle.py?如果是,重命名并重新运行
  • doneturtle 模块的函数,而不是turtle.Turtle 类的方法。

标签: python turtle-graphics


【解决方案1】:

此版本的代码应该解决 OP 的问题以及三角问题(即三角形应该闭合。)它还将使用以前未使用的角度 B 将海龟光标返回到其原始标题:

from math import pi, acos
from turtle import Turtle, mainloop

def draw_triangle(board, angles, sides):
    A, B, C = angles
    a, b, c = sides

    # draw side a
    board.forward(a)

    # Change direction and draw side b
    board.left(pi - C)
    board.forward(b)

    # Change direction and draw side c
    board.left(pi - A)
    board.forward(c)

    # If all's correct, return to starting angle
    board.left(pi - B)

def main():
    a = int(input("Enter a value for a: "))
    b = int(input("Enter a value for b: "))
    c = int(input("Enter a value for c: "))

    if a + b > c and b + c > a and a + c > b:
        print("Those ARE valid sides of a triangle")
    else:
        print("Those ARE NOT valid sides of a triangle")

    A = acos((b**2 + c**2 - a**2) / (2.0 * b * c))
    B = acos((c**2 + a**2 - b**2) / (2.0 * c * a))
    C = acos((a**2 + b**2 - c**2) / (2.0 * a * b))

    board = Turtle()
    board.radians()

    draw_triangle(board, [A, B, C], [a, b, c])

    mainloop()

main()

board.done() 无效,因为 board 是海龟,done() 是屏幕方法。三角问题是三个角度计算分配不正确。

最后,我将海龟切换为 弧度,这样所有数学运算都可以在不转换为度数的情况下完成。

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2020-06-20
    • 1970-01-01
    • 2016-03-10
    • 2019-02-24
    • 2020-04-07
    相关资源
    最近更新 更多