Ошибка "name not defined"

У меня есть код:

def create_tabl_random(n):
    global tabl
    tabl = []
    for i in range(n):
        tabl.append([])
        for j in range(n):
            tabl[i].append(random.randint(0, 1))
    for i in range(n):
        for j in range(n):
            if i == j:
                tabl[i][j] = 0
            else:
                tabl[i][j] = tabl[j][i]
    return tabl


def window():
    top = Toplevel(root)
    top.title("Матриця суміжності")
    top.minsize(700, 600)

    def random_gen():
        global tabl
        tabl = create_tabl_random(int(ent.get()))
        for i in range(int(ent.get())):
            for j in range(int(ent.get())):
                list_ent[i][j].insert(END, tabl[i][j])

    r = 1
    c = 1
    for m in range(int(ent.get())):
        lab = Label(top, text=m, bg="papaya whip", font=("Arial", 18), width=3)
        lab.grid(row=r, column=0)
        r += 1
    for n in range(int(ent.get())):
        lab = Label(top, text=n, bg="papaya whip", font=("Arial", 18), width=3)
        lab.grid(row=0, column=c)
        c += 1
    list_ent = []
    for i in range(int(ent.get())):
        list_ent.append([])
        for j in range(int(ent.get())):
            list_ent[i].append(Entry(top, font=("Arial", 18), bg="floral white", width=3))
            list_ent[i][j].grid(row=i + 1, column=j + 1, sticky=W)
    Button(top, text='Згенерувати випадково', font=("Arial", 18), command=random_gen).grid(row=1, column=int(ent.get()) + 1, pady=10)
Nmax = len(tabl)

на последней строчке выбивает ошибку

line 54, in <module>
    Nmax = len(tabl)
NameError: name 'tabl' is not defined

Мне нужно достать из этих всех функции переменную tabl чтобы продолжить с ней работать Перепробовал уже сто разных вариантов и все равно ошибка Буду благодарен за любую помощь Вот фото, чтобы было понятно, что я делаю


Ответы (2 шт):

Автор решения: gil9red

После вызова randomn_gen (например по клику на кнопки), вызов Nmax = len(tabl) вернет значение таблицы, до этого момент в tabl не будет значения.

# Глобальная переменная
tabl = None                         # <<<<<<<<<<<

def create_tabl_random(n):
    tabl = []
    for i in range(n):
        tabl.append([])
        for j in range(n):
            tabl[i].append(random.randint(0, 1))
    for i in range(n):
        for j in range(n):
            if i == j:
                tabl[i][j] = 0
            else:
                tabl[i][j] = tabl[j][i]
    return tabl


def window():
    top = Toplevel(root)
    top.title("Матриця суміжності")
    top.minsize(700, 600)

    def random_gen():
        # Инициация глобальной переменной
        global tabl
        tabl = create_tabl_random(int(ent.get()))
        for i in range(int(ent.get())):
            for j in range(int(ent.get())):
                list_ent[i][j].insert(END, tabl[i][j])

    r = 1
    c = 1
    for m in range(int(ent.get())):
        lab = Label(top, text=m, bg="papaya whip", font=("Arial", 18), width=3)
        lab.grid(row=r, column=0)
        r += 1
    for n in range(int(ent.get())):
        lab = Label(top, text=n, bg="papaya whip", font=("Arial", 18), width=3)
        lab.grid(row=0, column=c)
        c += 1
    list_ent = []
    for i in range(int(ent.get())):
        list_ent.append([])
        for j in range(int(ent.get())):
            list_ent[i].append(Entry(top, font=("Arial", 18), bg="floral white", width=3))
            list_ent[i][j].grid(row=i + 1, column=j + 1, sticky=W)
    Button(top, text='Згенерувати випадково', font=("Arial", 18), command=random_gen).grid(row=1, column=int(ent.get()) + 1, pady=10)
→ Ссылка
Автор решения: dhvcc

Не проверял код тк не знаю импортов, но, наверное, что-то на подобие этого может вам помочь

class App:
    def __init__(self):
        self.tabl = None

    def create_tabl_random(self, n):
        self.tabl = []
        for i in range(n):
            self.tabl.append([])
            for j in range(n):
                self.tabl[i].append(random.randint(0, 1))
        for i in range(n):
            for j in range(n):
                if i == j:
                    self.tabl[i][j] = 0
                else:
                    self.tabl[i][j] = self.tabl[j][i]
        return self.tabl

    def window(self):
        top = Toplevel(root)
        top.title("Матриця суміжності")
        top.minsize(700, 600)

        def random_gen(self):
            create_tabl_random(int(ent.get()))
            for i in range(int(ent.get())):
                for j in range(int(ent.get())):
                    list_ent[i][j].insert(END, self.tabl[i][j])

        r = 1
        c = 1
        for m in range(int(ent.get())):
            lab = Label(top, text=m, bg="papaya whip",
                        font=("Arial", 18), width=3)
            lab.grid(row=r, column=0)
            r += 1
        for n in range(int(ent.get())):
            lab = Label(top, text=n, bg="papaya whip",
                        font=("Arial", 18), width=3)
            lab.grid(row=0, column=c)
            c += 1
        list_ent = []
        for i in range(int(ent.get())):
            list_ent.append([])
            for j in range(int(ent.get())):
                list_ent[i].append(
                    Entry(top, font=("Arial", 18), bg="floral white", width=3))
                list_ent[i][j].grid(row=i + 1, column=j + 1, sticky=W)
        Button(top, text='Згенерувати випадково', font=("Arial", 18),
               command=random_gen).grid(row=1, column=int(ent.get()) + 1, pady=10)

app = App()
app.window()
Nmax = len(app.tabl)
→ Ссылка