Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2020, 22:59   #1
Solver`s
Пользователь
 
Регистрация: 03.12.2016
Сообщений: 25
Восклицание Проблема с многоразовым использованием функции

Здравствуйте.
Есть у меня функция расчета и вывода параметров болта.
Код:
def solve_equation():
    def solver(list_):
        l1 = float(Entry_I.get()) - float(
            Entry_J.get())  # The length of the working section of the screw without thread
        list_.append(float(l1))
        l2 = float(Entry_L.get()) + float(Entry_M.get()) + float(Entry_O.get()) + float(
            Entry_P.get()) - l1  # Threaded screw working length
        list_.append(float(l2))
        l3 = pi * (float(Entry_C.get()) ** 2) / 4  # Bolt cross-sectional area (gross)
        list_.append(float(l3))
        l4 = pi / 4 * (float(Entry_D.get()) / 2 + float(Entry_E.get()) / 2) ** 2  # Bolt cross-sectional area (net)
        list_.append(float(l4))
        l5 = exp(2.6111 * float(Entry_F.get()) / float(Entry_C.get()) - 0.48596) / float(Entry_C.get()) / float(
            Entry_A.get())  # The compliance of the threaded part of the bolt within the nut
        list_.append(float(l5))
        l6 = l2 / l4 / float(Entry_A.get())  # Threaded bolt working area compliance
        list_.append(float(l6))
        l7 = l1 / l3 / float(Entry_A.get())  # Compliance of a working section of a bolt without thread
        list_.append(float(l7))
        l8 = 0.15 / float(Entry_G.get()) / float(Entry_A.get())  # Bolt Head Compliance
        list_.append(float(l8))
        l9 = l5 + l6 + l7 + l8
        list_.append(float(l9))
        l10 = 2.3 / pi / float(Entry_N.get()) / float(Entry_A.get()) / float(Entry_Q.get()) * log10(
            (0.9 * float(Entry_H.get()) + float(Entry_N.get())) / (
                    0.9 * float(Entry_H.get()) - float(Entry_N.get())) * (
                    0.9 * float(Entry_H.get()) + 2 * float(Entry_O.get()) * float(Entry_Q.get()) - float(Entry_N.get()))
            / (0.9 * float(Entry_H.get()) + 2 * float(Entry_O.get()) * float(Entry_Q.get()) + float(Entry_N.get())))
        list_.append(float(l10))
        l11 = 2.3 / pi / float(Entry_N.get()) / float(Entry_A.get()) / float(Entry_Q.get()) * log10(
            (0.9 * float(Entry_H.get()) + float(Entry_N.get())) / (
                    0.9 * float(Entry_H.get()) - float(Entry_N.get())) * (
                    0.9 * float(Entry_H.get()) + 2 * float(Entry_P.get()) * float(Entry_Q.get()) - float(Entry_N.get()))
            / (0.9 * float(Entry_H.get()) + 2 * float(Entry_P.get()) * float(Entry_Q.get()) + float(Entry_N.get())))
        list_.append(float(l11))
        l12 = l9 + l10 + l11
        list_.append(float(l12))
        l13 = 2.3 / pi / float(Entry_H.get()) / float(Entry_A.get()) / float(Entry_Q.get()) * log10(
            (0.9 * float(Entry_H.get()) + 2 * float(Entry_O.get()) * float(Entry_Q.get()) + float(Entry_K.get())) / (
                    0.9 * float(Entry_H.get()) + 2 * float(Entry_O.get()) * float(Entry_Q.get()) -
                    float(Entry_K.get())) * (
                    0.9 * float(Entry_H.get()) + 2 * float(Entry_O.get()) * float(Entry_Q.get()) + 2 *
                    float(Entry_L.get()) * float(Entry_Q.get()) - float(Entry_K.get())) / (
                    0.9 * float(Entry_H.get()) + 2 * float(Entry_O.get()) * float(Entry_Q.get()) + 2 *
                    float(Entry_L.get()) * float(Entry_Q.get()) + float(Entry_K.get())))
        list_.append(float(l13))
        l14 = 2.3 / pi / float(Entry_K.get()) / float(Entry_A.get()) / float(Entry_Q.get()) * log10(
            (0.9 * float(Entry_H.get()) + 2 * float(Entry_P.get()) * float(Entry_Q.get()) + float(Entry_K.get())) / (
                    0.9 * float(Entry_H.get()) + 2 * float(Entry_P.get()) * float(Entry_Q.get()) -
                    float(Entry_K.get())) * (
                    0.9 * float(Entry_H.get()) + 2 * float(Entry_P.get()) * float(Entry_Q.get()) +
                    2 * float(Entry_M.get()) * float(Entry_Q.get()) - float(Entry_K.get())) / (
                    0.9 * float(Entry_H.get()) + 2 * float(Entry_P.get()) * float(Entry_Q.get()) +
                    2 * float(Entry_M.get()) * float(Entry_Q.get()) + float(Entry_K.get())))
        list_.append(float(l14))
        l15 = l13 + l14
        list_.append(float(l15))
        l16 = l15 / (l12 + l15)
        list_.append(float(l16))
        l17 = 0.5 * float(Entry_D.get()) / float(Entry_C.get()) * tan(
            atan(float(Entry_F.get()) / pi / float(Entry_D.get())) + atan(float(Entry_R.get()) / cos(pi / 6)))
        list_.append(float(l17))
        l18 = sqrt(1 + 48 * (float(Entry_C.get()) / float(Entry_E.get()) * l17) ** 2)
        list_.append(float(l18))
        l19 = float(Entry_T.get()) * float(Entry_C.get()) * l17 / 1000
        list_.append(float(l19))
        l20 = float(Entry_T.get()) / 3 * float(Entry_S.get()) * (
                (0.9 * float(Entry_H.get())) ** 3 - float(Entry_N.get()) ** 3) / (
                      (0.9 * float(Entry_H.get())) ** 2 - float(Entry_N.get()) ** 2) / 1000
        list_.append(float(l20))
        l21 = l19 + l20
        list_.append(float(l21))
        l22 = l4 * float(Entry_B.get())
        list_.append(float(l22))
        l23 = l22 / (l16 / (1 - l16) + l18)
        list_.append(float(l23))
        l24 = l22 / l18
        list_.append(float(l24))
        l25 = float(Entry_T.get()) * l18 / l4
        list_.append(float(l25))
        l26 = l25 / float(Entry_B.get()) * 100
        list_.append(float(l26))
        if float(Entry_T.get()) < l23:
            l27 = float(Entry_T.get()) / (1 - l16)
            list_.append(float(l27))
        else:
            l27 = '----'
            list_.append(l27)
        list_min_1 = [Entry_B.get(), Entry_B_d2.get()]
        dft = float(min(list_min_1))
        l28 = 0.9 * 0.25 * pi * (float(Entry_C.get()) ** 2 - float(Entry_E.get()) ** 2) * (
                (float(Entry_I.get()) - float(Entry_L.get()) - float(Entry_O.get()) - float(Entry_P.get())) /
                float(Entry_F.get()) - 2) * 1.5 * dft - float(Entry_T.get())
        list_.append(float(l28))
        l29 = 0.9 * pi * float(Entry_C.get()) * (
                float(Entry_I.get()) - float(Entry_L.get()) - float(Entry_O.get()) -
                float(Entry_P.get()) - 2 * float(Entry_F.get())) * 0.76 * 0.3 * dft - float(Entry_T.get())
        list_.append(float(l29))
        if l27 == '----':
            list_min_2 = [l28, l29]
        else:
            list_min_2 = [l27, l28, l29]
        l30 = min(list_min_2)
        list_.append(float(l30))
        l31 = float(Entry_U.get()) / l30
        list_.append(float(l31))
        l32 = float(Entry_I.get()) - float(Entry_L.get()) - float(Entry_M.get()) - float(Entry_O.get()) - float(
            Entry_P.get()) + float(Entry_C.get()) / 2
        list_.append(float(l32))

    solver(list_of_names_for_variable_values)
    l_1 = 0
    while l_1 < len(list_of_full_variables_names):
        Label(txt, text=list_of_full_variables_names[l_1]).grid(row=l_1, column=0, sticky=W)
        Label(txt, text=list_of_variables_names[l_1]).grid(row=l_1, column=1, ipadx=10, sticky=W)
        Label(txt, text='%.3f' % list_of_names_for_variable_values[l_1], font='Arial 14').grid(row=l_1,
                                                                                               column=2,
                                                                                               sticky=W)
        Label(txt, text=list_of_dimension_parameter[l_1]).grid(row=l_1, column=3, ipadx=1, sticky=W)
        l_1 = l_1 + 1
Которая в свою очередь привязана к нажатию кнопки.
Код:
but = Button(frame, text="Solve", command=solve_equation)
but.grid(row=0, column=0, padx=550, pady=770, sticky=N + W)
Данная функция считает и выводит данные, но только один раз за запуск программы. То есть, если я изменю входные данные и ещё раз нажму кнопку запуска расчета, то я не увижу никаких изменений.

Помогите, пожалуйста, разобраться с тем как исправить это. Спасибо.
Solver`s вне форума Ответить с цитированием
Старый 16.06.2020, 23:29   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Так думаю, что это тут:
Код:
def solver(list_):
    l1 = float(Entry_I.get()) - float(
Перед выполнение функции этот список должен очищаться, с тем, что бы при заполнении списка данные находились на своём месте.
В вашем случае список разрастается. Новые данные добавляются в список.
Для проверки сделайте печать списка в конце функции:
Код:
print(list_)
Код:
 def solver(list_):
     list_ = ()  # вроде так можно
     l1 = float(Entry_I.get()) - float(
     ...
     ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 17.06.2020, 13:27   #3
Solver`s
Пользователь
 
Регистрация: 03.12.2016
Сообщений: 25
По умолчанию

ViktorR, спасибо! Теперь значения меняются.

Правда я вместо
Код:
list_ = ()
использовал
Код:
list_.clear()
. Поскольку в первом случае у нас создается новый список. Если я не ошибаюсь, конечно.

Последний раз редактировалось Solver`s; 17.06.2020 в 13:37.
Solver`s вне форума Ответить с цитированием
Старый 17.06.2020, 15:15   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Вот тут было нечто подобное https://programmersforum.ru/showthread.php?t=332089
На мой взгляд очень хороший пример.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление функции с использованием разложения в ряд Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, maximk301 Помощь студентам 1 20.10.2018 16:20
C++ - Составить задачу с использованием функции vetal1997 Помощь студентам 10 23.11.2014 11:39
Программа с использованием функции TVIST95 Помощь студентам 1 29.11.2012 23:36
Переделать с использованием функции Camelot_2012 Паскаль, Turbo Pascal, PascalABC.NET 1 02.05.2012 22:57
Программа с использованием функции Cartman18 Помощь студентам 1 10.12.2007 16:29