У объекта 'Turtle' нет атрибута 'done', так как код зависает - PullRequest
0 голосов
/ 17 июня 2019

Я наткнулся на упражнение и не могу понять, как это сделать.

Упражнение:

Напишите функцию с именем Triangle1, которая принимает три целых числа в качестве входных переменных и печатает «Да» или «Нет», в зависимости от того, можете ли вы или не можете сформировать треугольник из сторон с заданной длиной. Кроме того, мне нужно «сформировать треугольник, используя черепаху питона с черепахой, создающей углы, основанные на заданных сторонах».

Это то, что я пробовал до сих пор. Однако я постоянно получаю ошибки, относящиеся к той или иной части черепахи, которая не определяется каким-либо образом:

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()

Я ожидаю, что на выходе кода будет нарисован треугольник, который изменяет углы в зависимости от введенной пользователем длины сторон.

1 Ответ

0 голосов
/ 17 июня 2019

Эта редакция кода должна исправить заявленные проблемы 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() - это метод экрана. Проблема тригонометрии заключалась в том, что вычисления трех углов были назначены неправильно.

Наконец, я переключил черепаху на радианы , чтобы все математические операции можно было выполнять без преобразования в градусы.

...