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

Почему выходит ошибка

31.12.2024, 14:34. Показов 923. Ответов 13

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import time
n=1
nn=1
s=0
m=0
f=1
a=None
q11=["", "", "", "", "", 2]
 
def rounnd():
    print("РАУНД "+str(n))
    time.sleep(2)
    print("")
    print("Вопрос: "+str(nn))
    nn=nn+1
    time.sleep(2)
    print("Очки: "+str(s))
    print("$: "+str(m))
rounnd()
io()
Весь мой код
При выводе сообщения с переменной n проблем нет. А при попытке вывести сообщ. с переменой nn выдаёт ошибку
UnboundLocalError: cannot access local variable 'nn' where it is not associated with a value
Как исправить? Вроде я делаю идентичные вещи, но с n работает, а с nn нет
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.12.2024, 14:34
Ответы с готовыми решениями:

Почему выходит ошибка с float?
код(надо просто кол-во отрицательных найти. и вводить можно пока икс не меньше 20): count = 0 x = float(input()) while x < 20: ...

Почему выходит такая ошибка?
n, m = map(int, input().split()) a = for _ in range(n): q=input().split() a.append(q) for i in range(n): for j...

Пожалуйста, объясните, почему выходит эта ошибка
Объясните, почему выходит эта ошибка: Traceback (most recent call last): File...

13
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
31.12.2024, 17:29
Python
1
2
3
def rounnd():
    global nn
    ...
2
53 / 54 / 2
Регистрация: 10.06.2023
Сообщений: 765
04.01.2025, 10:13
Но и "n" и "nn" вводятся одинаково. Почему к ним нужно относиться по-разному?
0
 Аватар для ViachaslauK
122 / 179 / 16
Регистрация: 08.10.2024
Сообщений: 629
04.01.2025, 10:50
Цитата Сообщение от VAF34 Посмотреть сообщение
Но и "n" и "nn" вводятся одинаково. Почему к ним нужно относиться по-разному?
потому что в строке 11 происходит вывод глобальной переменной и ошибок нет
в строке 15 происходит попытка обьявить локальную переменную с попыткой взять ее значение. переменная nn в этот момент переопределяется как локальная, а так как ее нет - возникает ошибка.
Прочитайте что такое LEGB in python - области видимости, станет понятнее

Добавлено через 1 минуту
Цитата Сообщение от Catstail Посмотреть сообщение
PythonВыделить код
def rounnd():
    global nn
    ...
Правильнее передать ее в функцию

Python
1
def(n,nn,s...)
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
04.01.2025, 15:12
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Правильнее
- почему?
0
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,291
04.01.2025, 15:42
VAF34, можно без глобалок и передачи параметров
Python
1
2
3
4
5
6
7
8
9
10
11
12
n = [1, 1]
 
def rounnd():
    print(f"РАУНД  {n[0]}")
    print(f"Вопрос: {n[1]}")
    n[1] = n[1]+1
    n[0] = n[0]+1
    print("")
    time.sleep(2)
 
for i in range(5):
    rounnd()
теперь главное не попутать что под каким индексом лежит
2
 Аватар для ViachaslauK
122 / 179 / 16
Регистрация: 08.10.2024
Сообщений: 629
04.01.2025, 20:13
Цитата Сообщение от Catstail Посмотреть сообщение
- почему?
Потому что всегда, когда можно не использовать глобальные переменные, нужно их не использовать. Это в принципе зло в Пайтоне. Если нужно подробностей - вспомните как распределяется память в пайтоне. Собственно почему не стоит - прекрасный пример это код ТСа - код не читаем и понять откуда ошибка - сложно. Опять же глобальные переменные храняться в общем адресном пространстве, доступ к ним более медленный.
Если работать с многопоточностью, то можно опять же хлебнуть проблем, не понимая откуда ваоится ошибка. Ну и ref counter/Garbage collector будет тянуть до последнего с удалением глобальных, то есть память расходуется нерационально.
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
можно без глобалок и передачи параметров
это прям классика, как нельзя делать и которым валят на собесах по вопросам LEGB и mutable/immutable
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
04.01.2025, 22:07
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Потому что всегда, когда можно не использовать глобальные переменные, нужно их не использовать.
- я ждал этого ответа... А почему тогда глобальные переменные вообще существуют в Питоне? Значит, они для чего-то нужны, не так ли?

Цитата Сообщение от ViachaslauK Посмотреть сообщение
Опять же глобальные переменные храняться хранятся в общем адресном пространстве, доступ к ним более медленный.
- откуда это известно?

Цитата Сообщение от ViachaslauK Посмотреть сообщение
Ну и ref counter/Garbage collector будет тянуть до последнего с удалением глобальных, то есть память расходуется нерационально.
- тянуть до последнего? Так это хорошо! Зачем же удалять глобальные переменные?

Доктринёрское мышление...
1
Любознательный
 Аватар для YuS_2
7404 / 2249 / 360
Регистрация: 10.03.2016
Сообщений: 5,197
04.01.2025, 23:19
Цитата Сообщение от Catstail Посмотреть сообщение
откуда это известно?
Это по принципу: услышал колокольчик, но где он звенит - не понял.
Не доступ более медленный, а поиск... но это исходя из самого принципа иерархии LEGB

Цитата Сообщение от ViachaslauK Посмотреть сообщение
это прям классика, как нельзя делать и которым валят на собесах по вопросам LEGB и mutable/immutable
где Вы таких шаблонов начинались?
Здесь не собесы... использование инструментов, в целом, определяется задачей.
А если таки прям горит в скорострельности - ну, используйте ассемблер шутка, вернее доля шутки...

Цитата Сообщение от ViachaslauK Посмотреть сообщение
до последнего с удалением глобальных
Глобальные - они на то и глобальные, что жить им самой судьбой предназначено, до самого конца светавыполнения программы

ЗЫ
ViachaslauK, а в целом, если делаете подобные заявления, то для более весомой аргументации (вместо: глобалки - зло!), приводите примеры того, о чем говорите...
А чем там валят на собесах - меньше всего интересно.
0
 Аватар для ViachaslauK
122 / 179 / 16
Регистрация: 08.10.2024
Сообщений: 629
05.01.2025, 10:48
Цитата Сообщение от YuS_2 Посмотреть сообщение
Это по принципу: услышал колокольчик, но где он звенит - не понял.
Не доступ более медленный, а поиск... но это исходя из самого принципа иерархии LEGB
Да, поиск, но разве это уточнение на что-то влияет?
Цитата Сообщение от Catstail Посмотреть сообщение
А почему тогда глобальные переменные вообще существуют в Питоне? Значит, они для чего-то нужны, не так ли?
Конечно нужны для чего-то) Речь о том, что их нужно применять правильно. Например, какие-то настройки для всего модуля, данные, которые не должны меняться в течение выполнения всей программы.
Цитата Сообщение от YuS_2 Посмотреть сообщение
а в целом, если делаете подобные заявления, то для более весомой аргументации (вместо: глобалки - зло!), приводите примеры того, о чем говорите...
Будьте внимательны! Пример ТС - прямо классика, когда глобальная переменная зло и вызывает ошибку. Тут обьявляется глобальная переменная, потом в функции обьявляется локальная переменная с таким же именем, но так как ТС думает, что он использует глобальную - пытается присвоить значение несуществующей переменной, получает ошибку.
Цитата Сообщение от Catstail Посмотреть сообщение
- тянуть до последнего? Так это хорошо! Зачем же удалять глобальные переменные?
А теперь перечитайте код ТС и обьясните, зачем там глобальная переменная и как она используется?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,683
Записей в блоге: 14
05.01.2025, 11:23
ViachaslauK, а Вы перечитайте моё сообщение. Ключевая фраза там - последняя.
Да, конечно, втыкать глобальные переменные "просто так" - не лучшая стратегия. Но и повторять с горящими глазами "глобалки - зло!" не намного лучше. Я, судя по всему, старше Вас и слышал такие "песни" давно... Первый куплет звучал так "GoTo - зло!"

Певцы предполагали, что "изжитие зла" приведет к счастью. Но, увы... Счастье по-прежнему недостижимо. А goto и глобальные переменные "потеснились", но никуда не делись.
0
 Аватар для ViachaslauK
122 / 179 / 16
Регистрация: 08.10.2024
Сообщений: 629
05.01.2025, 11:44
Цитата Сообщение от Catstail Посмотреть сообщение
ViachaslauK, а Вы перечитайте моё сообщение. Ключевая фраза там - последняя.
Да, конечно, втыкать глобальные переменные "просто так" - не лучшая стратегия. Но и повторять с горящими глазами "глобалки - зло!" не намного лучше. Я, судя по всему, старше Вас и слышал такие "песни" давно... Первый куплет звучал так "GoTo - зло!"
Певцы предполагали, что "изжитие зла" приведет к счастью. Но, увы... Счастье по-прежнему недостижимо. А goto и глобальные переменные "потеснились", но никуда не делись.
Я, может и преувеличил со "злом" в своем сообщении. Но это было сделано для акцента на проблеме. Суть - "Хочешь использовать глобальную переменную - сначала убедись что нет вариантов не использовать ее"
Но я достаточно разгребал кода, где неразумным использованием глобалок делали его и непредсказуемым и нечитаемым. Ну и привел свои примеры использования.
Может вы и старше, однако же готовить перфокарты с Фортраном мне приходилось...
2
 Аватар для Semen-Semenich
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,291
05.01.2025, 13:11
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Правильнее передать ее в функцию
вопрос тогда в том как их менять в глобальной области. у автора это счетчики раундов, вопросов и очки.
0
Любознательный
 Аватар для YuS_2
7404 / 2249 / 360
Регистрация: 10.03.2016
Сообщений: 5,197
05.01.2025, 14:02
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Да, поиск, но разве это уточнение на что-то влияет?
В общем случае, возможно, нет, но точность формулировок важна.
Тем более, что разница в скорости будет значительной только в случае безумно составленного кода, где существует огромная куча переменных и их поиск будет занимать много времени...

Цитата Сообщение от ViachaslauK Посмотреть сообщение
прямо классика, когда глобальная переменная зло и вызывает ошибку. Тут обьявляется глобальная переменная, потом в функции обьявляется локальная переменная с таким же именем, но так как ТС думает, что он использует глобальную - пытается присвоить значение несуществующей переменной, получает ошибку.
Если сказать точнее, то не глобальные переменные - зло, а неумение ими пользоваться. Если присутствует неправильное их объявление, то поэтому, соответственно и возникает исключение, а не потому, что сами глобалки - зло.

Цитата Сообщение от ViachaslauK Посмотреть сообщение
обьясните, зачем там глобальная переменная и как она используется?
Возможно, ТС проходит обучение и по его заданию необходимо составить код, использующий глобальные переменные с изменением их через процедуры... возможно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2025, 14:02
Помогаю со студенческими работами здесь

Почему выходит ошибка 'local variable '. ' referenced before assigment
Вот мой код: A = 1 Class BoxLayoutApp(App) : Def build(self) : Alsuper = Boxlayot(orintation=...

Почему когда запускаешь этот код import Queue выходит ошибка
import sys import pygame import string import Queue class game: def is_valid_value(self,char): if ( char ==...

Не могу понять почему выходит ошибка An error occurred while making the request: status code: 404 Process finished with
import requests from bs4 import BeautifulSoup URL = "https://ufa.hh.ru/?hhtmFrom=vacancy" page = requests.get(URL) if...

Почему выходит ошибка синтаксиса "unindent does not match any outer indentation level"
#coding utf8 import pygame import time import sys import random # размер оgна size = window =...

Почему выходит неправильный ответ?
Задача. Из передачи “Здоровье” Аня узнала, что рекомендуется спать хотя бы AA часов в сутки, но пересыпать тоже вредно и не стоит спать...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru