@Iceforest

Как «заставить» функции выполнятся после условий, если сначала их нужно написать?

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

import simple_draw as sd
def triangle(point, angle=0, length=200):
    v1 = sd.get_vector(start_point=point, angle=angle, length=200, width=3)
    v1.draw(color=sd.random_color())

    v2 = sd.get_vector(start_point=v1.end_point, angle=angle + 120, length=200, width=3)
    v2.draw(color=sd.random_color())

    v3 = sd.get_vector(start_point=v2.end_point, angle=angle + 240, length=200, width=3)
    v3.draw(color=sd.random_color())


def square(point, angle=0, length=200):
    v1 = sd.get_vector(start_point=point, angle=angle, length=200, width=3)
    v1.draw(color=sd.random_color())

    v2 = sd.get_vector(start_point=v1.end_point, angle=angle + 90, length=200, width=3)
    v2.draw(color=sd.random_color())

    v3 = sd.get_vector(start_point=v2.end_point, angle=angle + 180, length=200, width=3)
    v3.draw(color=sd.random_color())

    v4 = sd.get_vector(start_point=v3.end_point, angle=angle - 90, length=200, width=3)
    v4.draw(color=sd.random_color())
def pentangle(point, angle=0, length=100):
    v1 = sd.get_vector(start_point=point, angle=angle, length=100, width=3)
    v1.draw(color=sd.random_color())

    v2 = sd.get_vector(start_point=v1.end_point, angle=angle + 60, length=100, width=3)
    v2.draw(color=sd.random_color())

    v3 = sd.get_vector(start_point=v2.end_point, angle=angle + 120, length=100, width=3)
    v3.draw(color=sd.random_color())

    v4 = sd.get_vector(start_point=v3.end_point, angle=angle - 180, length=100, width=3)
    v4.draw(color=sd.random_color())

    v5 = sd.get_vector(start_point=v4.end_point, angle=angle - 120, length=100, width=3)
    v5.draw(color=sd.random_color())

    v6 = sd.get_vector(start_point=v5.end_point, angle=angle - 60, length=100, width=3)
    v6.draw(color=sd.random_color())


def sixangle(point, angle=0, length=100):
    v1 = sd.get_vector(start_point=point, angle=angle + 30, length=100, width=3)
    v1.draw(color=sd.random_color())

    v2 = sd.get_vector(start_point=v1.end_point, angle=angle + 90, length=100, width=3)
    v2.draw(color=sd.random_color())

    v3 = sd.get_vector(start_point=v2.end_point, angle=angle + 150, length=100, width=3)
    v3.draw(color=sd.random_color())

    v4 = sd.get_vector(start_point=v3.end_point, angle=angle + 210, length=100, width=3)
    v4.draw(color=sd.random_color())

    v5 = sd.get_vector(start_point=v4.end_point, angle=angle + 270, length=100, width=3)
    v5.draw(color=sd.random_color())

    v6 = sd.get_vector(start_point=v5.end_point, angle=angle + 330, length=100, width=3)
    v6.draw(color=sd.random_color())


point = sd.get_point(300, 300)
figures = {'1': triangle(point=point, angle=0, length=200), '2': square(point=point, angle=0, length=200),
           '3': pentangle(point, angle=0, length=100), '4': sixangle(point=point, angle=0, length=100)}
figures_numbers=[1,2,3,4]
user_input = input('Введите, пожалуйста, номер фигуры с 1 - 4: ')
number_figure = int(user_input)
# number_figure = 2
if number_figure in figures_numbers:
    figures[number_figure]()
else:
    print('Вы ввели неправильный номер фигуры, введите значение от 1 до 4')

sd.pause()
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
@o5a
Рисуется сразу потому что в словаре содержатся вызовы (т.е. результаты вызова функции) вместо самих функций.
Нужно изменить словарь и соответственно добавить параметр в вызов функции (как значение из словаря). Также выкинул figures_numbers т.к. смысла в нем тут нет.

point = sd.get_point(300, 300)
figures = {1: triangle, 2: square, 3: pentangle, 4: sixangle}
user_input = input('Введите, пожалуйста, номер фигуры с 1 - 4: ')
number_figure = int(user_input)
# number_figure = 2
if number_figure in figures:
    figures[number_figure](point)
else:
    print('Вы ввели неправильный номер фигуры, введите значение от 1 до 4')

sd.pause()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Zanak
Если я правильно понял вопрос, то ваша проблема здесь:
figures = {'1': triangle(point=point, angle=0, length=200), '2': square(point=point, angle=0, length=200),
           '3': pentangle(point, angle=0, length=100), '4': sixangle(point=point, angle=0, length=100)}

Вы вместо ссылки на функцию сохраняете результат ее вызова, и так для каждого ключа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы