Создание нескольких функций с помощью pyplot, передача функций в функции и повторное использование кода - PullRequest
0 голосов
/ 01 октября 2019
import matplotlib.pyplot as plt

x_coords = []
y_coords = []


def myFunction(x):
    return (3*(x**2)) + (6*x) + 9


def anotherFunction(x):
    return (x***3) + (x**2) + x


def getCoords(fun, num):
    for n in range(num):
        x_coords.append(n)
        y_coords.append(fun(n))


def draw_graph(x, y):
    plt.plot(x, y, marker="o")
    plt.show()


if __name__ == "__main__":
    # myFunction needs an argument,
    # getCoords provides it as num
    getCoords(myFunction(), 42)
    draw_graph(x_coords, y_coords)
    getCoords(anotherFunction(), 69)
    draw_graph(x_coords, y_coords)

Я хочу построить несколько произвольных математических функций, в то же время (в идеале?) Использовать код для получения координат и их построения. Как я понял, теперь мои математические функции принимают значение X;и проблема в том, что я не могу передать это в свой getCoords (), который имеет параметры как для самой математической функции (веселье), так и для ее значений X (num). Был бы лучший способ реструктурировать это, или я очень близок к тому, чтобы заставить это работать?

На этот вопрос есть отличные ответы, но я не уверен, как их интегрировать.

Я также следую книге «Делаем математику с Python». Поэтому я надеюсь, что со временем это выясню.

1 Ответ

1 голос
/ 01 октября 2019

Вы должны предоставить саму функцию, а не ее вызов.

getCoords(myFunction, 42)
getCoords(anotherFunction, 69)

Вы можете реструктурировать что-то вроде этого. Наличие специальной функции для получения координат и специальной функции для их рисования:

def myFunction(x):
    return (3*(x**2)) + (6*x) + 9


def get_coords(fun, num):
    for n in range(num):
        yield n, fun(n)


def draw_graph(coordinates):
    for x, y in coordinates:
        plt.plot(x, y, marker="o")
    plt.show()


draw_graph(get_coords(myFunction, 45))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...