Форум программистов, компьютерный форум, киберфорум
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. Показов 2705. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
25.03.2021, 15:54
Цитата Сообщение от Dmitriy83 Посмотреть сообщение
Я это делал. Программа выдает ноль даже при условии, что я ввожу адекватные данные L=4: d=16
в третий раз написать? ок! есть варианты когда не войдет ни в одну ветку условий! ты понимаешь о чем я? и тогда ку=0!
ТО есть проблема то с условиями!

или используй отладчик или хоття бы выводи значения и их тип! там точно не строки приходят?
0
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
25.03.2021, 16:10
А разве в Combobox value не должно быть строкой? Или списком строк..? Во всяком случае get вернет точно не int.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru