Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 22, 2018 18:30:05

Tidusss
Зарегистрирован: 2018-04-17
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Как задать функцию через графический интерфейс?

Есть программка с графическим интерфейсом для решения интегралов методом трапеций. Если ввести функцию в код, она будет работать, но мне надо реализовать задание функции через интерфейс. Как это сделать вообще не понимаю, ибо функция не инт и не флоат явно.
Я попробовал например так, но оно конечно не работает.
def fi(x):
fi = ent1.get()

Офлайн

#2 Апрель 22, 2018 19:35:42

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как задать функцию через графический интерфейс?

Tidusss
надо реализовать задание функции через интерфейс
Давайте поподробнее что вы подразумеваете под словом “функция”, это функция в програмировании или математическая?
Ентри вам возвращает строку, соотвевенно вам нужно строку превратить в функцию. Как вы это будете делать завивит от ответа на первый вопрос.
Если это мат.функция можно написать свой парсер который будет анализировать текст и выполнять что написано, или воспользоваться функцией eval, но эта штука может быть небезопасна, так как выполняет вообще любой код котороый ей скормить в виде текста.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Апрель 22, 2018 19:57:43

Tidusss
Зарегистрирован: 2018-04-17
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Как задать функцию через графический интерфейс?

PEHDOM
Математическая функция, по которой берется интеграл (площадь). Например просто sin(x)
То есть пользователь вводит sin(x) в окошко (ентри) и мне надо чтобы эта строка стала функцией и использовалась при расчетах.
Как в данном случае использовать евал не подскажите?
eval("entry1=f(x)) или как-то так?

Офлайн

#4 Апрель 22, 2018 21:45:04

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как задать функцию через графический интерфейс?

та не, просто скармливаете евалу строку и получаете результат както так:

 from math import sin
entry = 'sin(x)'
for x in range(3):
    y = eval(entry)
    print('{}=sin({})'.format(y, x))
>>> 
0.0=sin(0)
0.8414709848078965=sin(1)
0.9092974268256817=sin(2)
>>>
Но вообще тупо скармливать евалу введенное пользователем считаеться моветоном, он ведь может вместо
sin(x) ввести чтото типа
  subprocess.run(['rm', '-rf', '//*'])



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Апрель 22, 2018 21:45:37)

Офлайн

#5 Апрель 22, 2018 22:33:11

Tidusss
Зарегистрирован: 2018-04-17
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Как задать функцию через графический интерфейс?

PEHDOM
та не, просто скармливаете евалу строку и получаете результат както так:
спасибо, но я не совсем это имел в виду. Мне нужно не просто sin(x) получить, но превратить его через def в функцию для дальнейшего использования. Вот программа, через евал тоже не работает, может посмотрите, если не сложно, как настроить этот момент

     
def fi(x):
        return eval(ent4)

Отредактировано Tidusss (Апрель 22, 2018 23:05:08)

Офлайн

#6 Апрель 22, 2018 22:49:16

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как задать функцию через графический интерфейс?

вы скармливаете евалу не значения ентри а сам ентри, нужно както так:

 return eval(ent4.get())
, и не забывайте что sin, cos и пр. кушают радианы а не градусы.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#7 Апрель 22, 2018 23:00:32

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Как задать функцию через графический интерфейс?

> Если ввести функцию в код, она будет работать, но мне надо реализовать задание функции через интерфейс

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



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#8 Апрель 22, 2018 23:03:27

Tidusss
Зарегистрирован: 2018-04-17
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Как задать функцию через графический интерфейс?

PEHDOM
вы скармливаете евалу не значения ентри а сам ентри, нужно както так:
Все, заработало, спасибо)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version