Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 24.03.2021
Сообщений: 5

Ошибка UnboundLocalError: local variable 'q' referenced before assignment

24.03.2021, 22:52. Показов 2730. Ответов 10

Студворк — интернет-сервис помощи студентам
Ошибка UnboundLocalError: local variable 'q' referenced before assignment. Добрый день всем. Ребята помогите исправить ошибку плз. Вот написал такой код. Отдельно все работает, а когда вставил блок if внутрь выдает ошибку. Заранее благодарен.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from tkinter import *
from tkinter import messagebox as mb
from tkinter.ttk import Combobox
 
 
class Window:
    def __init__(self, width, height, title="MyWindow", resizable=(False, False), icon=None):
        self.root = Tk()
        self.root.title(title)
        if icon:
            self.root.iconbitmap(r"C: \Users\user\Desktop\Pyhton\HW\HW\p.ico")
 
        self.numbers = Combobox(self.root, values=(
            14, 16, 18, 20), state="readonly")
        self.longs = Combobox(self.root, values=(4, 6), state="readonly")
        self.match = Combobox(self.root, values=(
            1, 2, 3, 4, 5), state="readonly")
 
    def run(self):
        self.draw_widgets()
        self.root.mainloop()
 
    def draw_widgets(self):
        self.numbers.pack()
        self.longs.pack()
        self.match.pack()
 
        Button(self.root, text="Gets", width=10,
               command=self.get_number).pack()
        Button(self.root, text="Quit", width=10, command=self.exit).pack()
 
    def get_number(self):
        d = self.numbers.get()
        l = self.longs.get()
        a = self.match.get()
        if l == 4:
            if d == 14:
                q = 0.073
            elif d == 16:
                q = 0.095
            elif d == 18:
                q = 0.12
            elif d == 20:
                q = 0.147
            else:
                print('Введен не верный диаметр')
        elif l == 6:
            if d == 14:
                q = 0.123
            elif d == 16:
                q = 0.155
            elif d == 18:
                q = 0.194
            elif d == 20:
                q = 0.23
            else:
                print('Введен не верный диаметр')
 
        mb.showinfo(f'q: {q}')
 
    def exit(self):
        choice = mb.askyesno("Quit", "Do you want to quit?")
        if choice:
            self.root.destroy()
 
 
if __name__ == "__main__":
    window = Window(500, 500, "TKINTER")
    window.run()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2021, 22:52
Ответы с готовыми решениями:

Ошибка: UnboundLocalError: local variable 'x' referenced before assignment
Здрасьте, напишу пример кода, чтобы не парить вам голову собой: x=1 t=1 y=1 def func(): x+=1 t=x%2 while t==0: ...

Ошибка UnboundLocalError: local variable 'd' referenced before assignment
Добрый вечер, участники форума. У меня есть программа: import math def f(a, b, c): res = (2*a-b-math.sin(c))/(5+abs(c)) ...

UnboundLocalError: local variable 'i' referenced before assignment
Разбирался с итераторами и функциями встретил ошибку при запуске интерпретатора: def adder(started=0,finished=0): result = 0 for...

10
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
25.03.2021, 08:47
Dmitriy83, в ошибке все понятно. Сам то не можешь догадаться что при определенных условиях у тебя ни в одну ветку if не войдет и переменной q не будет создано?
0
0 / 0 / 0
Регистрация: 24.03.2021
Сообщений: 5
25.03.2021, 12:19  [ТС]
Подскажи пожалуйста как исправить
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
25.03.2021, 12:39
Цитата Сообщение от Dmitriy83 Посмотреть сообщение
Подскажи пожалуйста как исправить
прочесть что я написал. Но я знаю что читать сейчас не принято. Подскажу - создай переменную q=0 перед строкой 36, тогда даже если ни одно из условий не выполнится ошибки не будет, правда и результат тебе наверное не понравится.
0
0 / 0 / 0
Регистрация: 24.03.2021
Сообщений: 5
25.03.2021, 15:44  [ТС]
Я это делал. Программа выдает ноль даже при условии, что я ввожу адекватные данные L=4: d=16
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
25.03.2021, 15:54
Цитата Сообщение от Dmitriy83 Посмотреть сообщение
Я это делал. Программа выдает ноль даже при условии, что я ввожу адекватные данные L=4: d=16
в третий раз написать? ок! есть варианты когда не войдет ни в одну ветку условий! ты понимаешь о чем я? и тогда ку=0!
ТО есть проблема то с условиями!

или используй отладчик или хоття бы выводи значения и их тип! там точно не строки приходят?
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
25.03.2021, 16:10
А разве в Combobox value не должно быть строкой? Или списком строк..? Во всяком случае get вернет точно не int.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
25.03.2021, 16:10
ставлю 10ку что вот тут приходит строка а не инт! потому у тебя и не пашет!
Цитата Сообщение от Dmitriy83 Посмотреть сообщение
d = self.numbers.get()
1
0 / 0 / 0
Регистрация: 24.03.2021
Сообщений: 5
25.03.2021, 16:27  [ТС]
Спасибо огромное. Обернул int работает. А по поводу случаев когда условие не будет попадать. Я вить ввожу значения через комбобокс а там я внес только валидные значения и только для чтения.
0
0 / 0 / 0
Регистрация: 24.03.2021
Сообщений: 5
26.03.2021, 08:42  [ТС]
Welemir1,
Подскажите пожалуйста. как мне тут передать переменную v в label.
[PYTHON
]from tkinter.ttk import Combobox
from tkinter import messagebox as mb
from tkinter import *
import math


class Window:
def __init__(self, width, height, title="MyWindow", resizable=(False, False), icon=None):
self.root = Tk()
self.root.geometry(f"{width}x{height}+20 0+200")
self.root.resizable(resizable[0], resizable[1])
self.root.title(title)
if icon:
self.root.iconbitmap(r"C: \Users\user\Desktop\Pyhton\HW\HW\p.ico")

self.numbers = Combobox(self.root, height=10, values=(
14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48), state="readonly")
self.longs = Combobox(self.root, values=(
4, 6), state="readonly")
self.match = Combobox(self.root, state="readonly")
self.match = Entry(self.root)
str_var = StringVar(value=str(v))
self.label = Label(self.root, width=30, height=5, textvariable=str_var)


def run(self):
self.draw_widgets()
self.root.mainloop()

def draw_widgets(self):
self.lable.grid(row=0, column=0, columnspan=2, sticky=E+W)
self.numbers.grid(row=1, column=1)
self.longs.grid(row=2, column=1)
self.match.grid(row=3, column=1)
# Label(bg='red', width=30, height=5).grid(
# row=0, column=0, columnspan=2, sticky=E+W)
Label(width=30, height=5, bg='green',
text='Выбери диаметр:').grid(row=1, column=0)
Label(width=30, height=5, bg='blue',
text='Выбери длину:').grid(row=2, column=0)
Label(width=30, height=5, bg='yellow',
text='Введи количество').grid(row=3, column=0)

Button(self.root, text="Gets", width=20, height=10, bd=2, bg='pink',
command=self.get_number).grid(row=4, column=0)
Button(self.root, text="Quit", width=20, height=10,
command=self.exit).grid(row=4, column=1)

def get_number(self):
d = float(self.numbers.get())
l = float(self.longs.get())
a = float(self.match.get())

if l == 4:
if d == 14:
q = 0.073
elif d == 16:
q = 0.095
elif d == 18:
q = 0.12
elif d == 20:
q = 0.147
elif d == 22:
q = 0.178
elif d == 24:
q = 0.21
elif d == 26:
q = 0.25
elif d == 28:
q = 0.29
elif d == 30:
q = 0.33
elif d == 32:
q = 0.38
elif d == 34:
q = 0.43
elif d == 36:
q = 0.48
elif d == 38:
q = 0.53
elif d == 40:
q = 0.58
elif d == 42:
q = 0.64
elif d == 44:
q = 0.7
elif d == 46:
q = 0.77
elif d == 48:
q = 0.84
else:
print('Введен не верный диаметр')
elif l == 6:
if d == 14:
q = 0.123
elif d == 16:
q = 0.155
elif d == 18:
q = 0.194
elif d == 20:
q = 0.23
elif d == 22:
q = 0.28
elif d == 24:
q = 0.33
elif d == 26:
q = 0.39
elif d == 28:
q = 0.45
elif d == 30:
q = 0.52
elif d == 32:
q = 0.59
elif d == 34:
q = 0.59
elif d == 36:
q = 0.66
elif d == 38:
q = 0.82
elif d == 40:
q = 0.90
elif d == 42:
q = 1
elif d == 44:
q = 1.09
elif d == 46:
q = 1.19
elif d == 48:
q = 1.3
else:
print('Введен не верный диаметр')

v = float(l) * float(q) * float(a) * float(d) / 10
#str_var = StringVar(value=v)
mb.showinfo(f'q: {v}, {q}')

def exit(self):
choice = mb.askyesno("Quit", "Do you want to quit?")
if choice:
self.root.destroy()

def changeText(self):
self.text.set("Text updated")


if __name__ == "__main__":
window = Window(360, 500, "My_Project")
window.run()
[/PYTHON]
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
26.03.2021, 08:44
Dmitriy83, код не читаем, во-вторых я тебя очень прошу перевести и прочесть мою подпись - она очень важна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2021, 08:44
Помогаю со студенческими работами здесь

UnboundLocalError: local variable 'a' referenced before assignment что не так?
import random from random import randint global a a = 1000 def main(): x = 0 while (x == 0): print('-'*50) ...

UnboundLocalError: local variable 'score3' referenced before assignment"
Я только начал изучать питон, и решил сделать свою первую программу. Консольный ее вариант работает исправно. Пошел переносить на tkinter....

Ошибка: local variable 'index' referenced before assignment
Здравствуйте! В процессе написания кода вышел такой эксепшен: local variable 'index' referenced before assignment В чем причина? f =...

Local variable 'fsum' referenced before assignment
Имеетс конструкция такого вида: for i in range(5): for j in range(6): m1 = Mtrx - math.fsum( * m1 for k in range(j)]) ...

UnboundLocalError: local variable 'kd' referenced before assignment
При выполнении данного кода: import telebot from telebot import types import time import config bot =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru