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

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

31.12.2024, 14:34. Показов 966. Ответов 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
38178 / 21113 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
31.12.2024, 17:29
Python
1
2
3
def rounnd():
    global nn
    ...
2
58 / 58 / 4
Регистрация: 10.06.2023
Сообщений: 888
04.01.2025, 10:13
Но и "n" и "nn" вводятся одинаково. Почему к ним нужно относиться по-разному?
0
 Аватар для ViachaslauK
126 / 185 / 16
Регистрация: 08.10.2024
Сообщений: 693
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
38178 / 21113 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
04.01.2025, 15:12
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Правильнее
- почему?
0
 Аватар для Semen-Semenich
5233 / 3478 / 1175
Регистрация: 21.03.2016
Сообщений: 8,305
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
126 / 185 / 16
Регистрация: 08.10.2024
Сообщений: 693
04.01.2025, 20:13
Цитата Сообщение от Catstail Посмотреть сообщение
- почему?
Потому что всегда, когда можно не использовать глобальные переменные, нужно их не использовать. Это в принципе зло в Пайтоне. Если нужно подробностей - вспомните как распределяется память в пайтоне. Собственно почему не стоит - прекрасный пример это код ТСа - код не читаем и понять откуда ошибка - сложно. Опять же глобальные переменные храняться в общем адресном пространстве, доступ к ним более медленный.
Если работать с многопоточностью, то можно опять же хлебнуть проблем, не понимая откуда ваоится ошибка. Ну и ref counter/Garbage collector будет тянуть до последнего с удалением глобальных, то есть память расходуется нерационально.
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
можно без глобалок и передачи параметров
это прям классика, как нельзя делать и которым валят на собесах по вопросам LEGB и mutable/immutable
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38178 / 21113 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
04.01.2025, 22:07
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Потому что всегда, когда можно не использовать глобальные переменные, нужно их не использовать.
- я ждал этого ответа... А почему тогда глобальные переменные вообще существуют в Питоне? Значит, они для чего-то нужны, не так ли?

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

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

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

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

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

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

Певцы предполагали, что "изжитие зла" приведет к счастью. Но, увы... Счастье по-прежнему недостижимо. А goto и глобальные переменные "потеснились", но никуда не делись.
0
 Аватар для ViachaslauK
126 / 185 / 16
Регистрация: 08.10.2024
Сообщений: 693
05.01.2025, 11:44
Цитата Сообщение от Catstail Посмотреть сообщение
ViachaslauK, а Вы перечитайте моё сообщение. Ключевая фраза там - последняя.
Да, конечно, втыкать глобальные переменные "просто так" - не лучшая стратегия. Но и повторять с горящими глазами "глобалки - зло!" не намного лучше. Я, судя по всему, старше Вас и слышал такие "песни" давно... Первый куплет звучал так "GoTo - зло!"
Певцы предполагали, что "изжитие зла" приведет к счастью. Но, увы... Счастье по-прежнему недостижимо. А goto и глобальные переменные "потеснились", но никуда не делись.
Я, может и преувеличил со "злом" в своем сообщении. Но это было сделано для акцента на проблеме. Суть - "Хочешь использовать глобальную переменную - сначала убедись что нет вариантов не использовать ее"
Но я достаточно разгребал кода, где неразумным использованием глобалок делали его и непредсказуемым и нечитаемым. Ну и привел свои примеры использования.
Может вы и старше, однако же готовить перфокарты с Фортраном мне приходилось...
2
 Аватар для Semen-Semenich
5233 / 3478 / 1175
Регистрация: 21.03.2016
Сообщений: 8,305
05.01.2025, 13:11
Цитата Сообщение от ViachaslauK Посмотреть сообщение
Правильнее передать ее в функцию
вопрос тогда в том как их менять в глобальной области. у автора это счетчики раундов, вопросов и очки.
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
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
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru