Не могу согласиться про ошибку с вычислениями, эта ошибка и последующая неправильность в ответах возникает только при запуске after.. Spisok_dereva, как и Slovar_dereva заполняется в функции make_tree, в них хранятся главные вычисления и они заполняются всегда одинаково и по той логике, которая была задумана, проверено тысячу раз еще при отладке без графики. Скорее всего, либо функция after запускает не совсем так, либо плохой стиль написания кода, типа повсеместного использования global, мог где-то сыграть. В общем, буду приводить код в нормальный вид. Еще раз хочу поблагодарить за помощь и задать пару глупых вопросов.
1)Чем именно опасно чрезмерное применение global?
2)В подобных часто встречающихся строках что следует предпочесть - краткость или читабельность?
b1=Button(rootf, text="", height=2, width=5, command=lambda:game('1'))
b2=Button(rootf, text="", height=2, width=5, command=lambda:game('2'))
b3=Button(rootf, text="", height=2, width=5, command=lambda:game('3'))
b4=Button(rootf, text="", height=2, width=5, command=lambda:game('4'))
b5=Button(rootf, text="", height=2, width=5, command=lambda:game('5'))
b6=Button(rootf, text="", height=2, width=5, command=lambda:game('6'))
b7=Button(rootf, text="", height=2, width=5, command=lambda:game('7'))
b8=Button(rootf, text="", height=2, width=5, command=lambda:game('8'))
b9=Button(rootf, text="", height=2, width=5, command=lambda:game('9'))
b1.grid(row=0,column=0)
b2.grid(row=0,column=1)
b3.grid(row=0,column=2)
b4.grid(row=1,column=0)
b5.grid(row=1,column=1)
b6.grid(row=1,column=2)
b7.grid(row=2,column=0)
b8.grid(row=2,column=1)
b9.grid(row=2,column=2)
эту последовательность можно сократить так:
number=1
while number <10:
globals()['b'+str(number)]=Button(rootf, text="", height=2, width=5, command=lambda:game(str(number)))
globals()['b'+str(number)].grid(row=int((number-0.1)/3),column=int((number-0.1)%3))
number+=1
Но правильно ли это - из 300 строк кода сделать 150 математически зашифрованных?