Как можно сократить/оптимизировать эту функцию?

Рейтинг: 0Ответов: 1Опубликовано: 12.02.2023

Только начал изучать Python, это часть моей первой программы, как можно сократить/оптимизировать эту часть кода? Функция работает с библиотекой tkinter и time.

def start():
global value1, value2, value3, RB
global exc1, exc2, exc3, exc4, exc5, exc6

while True:
    exc1 = value1 // 10 % 10
    exc2 = value1 % 10
    exc3 = value2 // 10 % 10
    exc4 = value2 % 10
    exc5 = value3 // 10 % 10
    exc6 = value3 % 10

    if value2 == 0 and value3 == 0 and value1 > value4:
        value1 = value1 - 1
        value2 = value2 + 59
        value3 = value3 + 60
    if value3 == 0 and value2 > value5:
        value2 = value2 - 1
        value3 = value3 + 60

    numbers_false()

    if exc1 == 0:
        zero1.place(x=260, y=220)
    elif exc1 == 1:
        one1.place(x=260, y=220)
    elif exc1 == 2:
        two1.place(x=260, y=220)
    elif exc1 == 3:
        three1.place(x=260, y=220)
    elif exc1 == 4:
        four1.place(x=2640, y=220)
    elif exc1 == 5:
        five1.place(x=260, y=220)
    elif exc1 == 6:
        six1.place(x=260, y=220)
    elif exc1 == 7:
        seven1.place(x=260, y=220)
    elif exc1 == 8:
        eight1.place(x=260, y=220)
    elif exc1 == 9:
        nine1.place(x=260, y=220)

    if exc2 == 0:
        zero2.place(x=290, y=220)
    elif exc2 == 1:
        one2.place(x=290, y=220)
    elif exc2 == 3:
        two2.place(x=290, y=220)
    elif exc2 == 3:
        three2.place(x=290, y=220)
    elif exc2 == 4:
        four2.place(x=290, y=220)
    elif exc2 == 5:
        five2.place(x=290, y=220)
    elif exc2 == 6:
        six2.place(x=290, y=220)
    elif exc2 == 7:
        seven2.place(x=290, y=220)
    elif exc2 == 8:
        eight2.place(x=290, y=220)
    elif exc2 == 9:
        nine2.place(x=290, y=220)

    if exc3 == 0:
        zero3.place(x=340, y=220)
    elif exc3 == 1:
        one3.place(x=340, y=220)
    elif exc3 == 2:
        two3.place(x=340, y=220)
    elif exc3 == 3:
        three3.place(x=340, y=220)
    elif exc3 == 4:
        four3.place(x=340, y=220)
    elif exc3 == 5:
        five3.place(x=340, y=220)
    elif exc3 == 6:
        six3.place(x=340, y=220)
    elif exc3 == 7:
        seven3.place(x=340, y=220)
    elif exc3 == 8:
        eight3.place(x=340, y=220)
    elif exc3 == 9:
        nine3.place(x=340, y=220)

    if exc4 == 0:
        zero4.place(x=370, y=220)
    elif exc4 == 1:
        one4.place(x=370, y=220)
    elif exc4 == 2:
        two4.place(x=370, y=220)
    elif exc4 == 3:
        three4.place(x=370, y=220)
    elif exc4 == 4:
        four4.place(x=370, y=220)
    elif exc4 == 5:
        five4.place(x=370, y=220)
    elif exc4 == 6:
        six4.place(x=370, y=220)
    elif exc4 == 7:
        seven4.place(x=370, y=220)
    elif exc4 == 8:
        eight4.place(x=370, y=220)
    elif exc4 == 9:
        nine4.place(x=370, y=220)

    if exc5 == 0:
        zero5.place(x=420, y=220)
    elif exc5 == 1:
        one5.place(x=420, y=220)
    elif exc5 == 2:
        two5.place(x=420, y=220)
    elif exc5 == 3:
        three5.place(x=420, y=220)
    elif exc5 == 4:
        four5.place(x=420, y=220)
    elif exc5 == 5:
        five5.place(x=420, y=220)
    elif exc5 == 6:
        six5.place(x=420, y=220)
    elif exc5 == 7:
        seven5.place(x=420, y=220)
    elif exc5 == 8:
        eight5.place(x=420, y=220)
    elif exc5 == 9:
        nine5.place(x=420, y=220)

    if exc6 == 0:
        zero6.place(x=450, y=220)
    elif exc6 == 1:
        one6.place(x=450, y=220)
    elif exc6 == 2:
        two6.place(x=450, y=220)
    elif exc6 == 3:
        three6.place(x=450, y=220)
    elif exc6 == 4:
        four6.place(x=450, y=220)
    elif exc6 == 5:
        five6.place(x=450, y=220)
    elif exc6 == 6:
        six6.place(x=450, y=220)
    elif exc6 == 7:
        seven6.place(x=450, y=220)
    elif exc6 == 8:
        eight6.place(x=450, y=220)
    elif exc6 == 9:
        nine6.place(x=450, y=220)

    value3 = value3 - 1
    window.update()

    if value3 == value6 - 1 and value2 == value5 and value1 == value4 and RB is True:
        visible_false()
        SC2.place(x=322, y=300)
        Btn_get_continue.place_forget()
        Btn_get_reset.place_forget()
        Btn_get_stop.place_forget()
        break
    elif RB is False:
        break

    time.sleep(1)

Ответы

▲ 1Принят

Можно создать списки, содержащие ссылки на объекты zero1, one1... и при помощи индексирования обрабатывать нужные. Например:

exc1 = value1 // 10 % 10
exc1_v = [zero1, one1, two1, three1, four1, five1, six1, seven1, eight1, nine1]
exc1_v[exc1].place(x=260, y=220)

И такие же списки и обращения сделать для остальных условий