Найти - Пользователи
Полная версия: Переменная - это ведь ссылка?
Начало » Python для новичков » Переменная - это ведь ссылка?
1 2 3
Mixeyka
Делаю задание по книге, процедурой, так как до функций ещё не добрался. Проблема возникла во время присваивания.

есть переменная - “сила”
присваиваю переменной “увеличиваемый_параметр”, переменную “сила”.
Провожу операции над переменной “увеличиваемый_параметр”, но это не влияет на параметр сила, как будто я провожу операцию над локальной переменной, а не над глобальной. Почему?

Вот код:


# Генератор Персонажей
# 
# Смысл задачи, составить программу в которой пользователь, распределяет
# параметры по характеристикам героя.
МЕНЮ = ("""
Выберите, пункт меню:
   0. Выход.
   1. Добавить очки.
   2. Убрать очки."""
        )
запас_очков = 30
сила = 1
ловкость = 2
мудрость = 3
здоровье = 4
пункт_меню = ""
# Предлагаем пользователю поработать с меню.
while пункт_меню != "0":
    print(МЕНЮ)
    пункт_меню = input("Укажите нужный вам пункт меню: ")
        
    if пункт_меню == "0":
        print("Программа завершена")
    elif пункт_меню == "1":
        номер_параметра = ""            
        while номер_параметра != "0":
            print("Ваши параметры:")
            print("   0. Выйти в предыдущее меню.")
            print("   1. Сила = ", сила)
            print("   2. Ловкость = ", ловкость)
            print("   3. Мудрость = ", мудрость)
            print("   4. Здоровье = ", здоровье)
            номер_параметра = input("Введите номер параметра, для увеличения: ")
            if номер_параметра == "0": # Возврат в предыдущее меню.
                pass
            # Принимаем значение выбранного пункта меню.    
            elif номер_параметра == "1":
                выбранный_параметр = "сила"
                увеличиваемый_параметр = сила
            elif номер_параметра == "2":
                выбранный_параметр = "ловкость"
                увеличиваемый_параметр = ловкость
            elif номер_параметра == "3":
                выбранный_параметр = "мудрость"
                увеличиваемый_параметр = мудрость
            elif номер_параметра == "4":
                выбранный_параметр = "здоровье"
                увеличиваемый_параметр = здоровье
            # Модуль увеличения параметра.
            print("Ваш запас очков равен - ", запас_очков)                
            увеличение = int(input("Укажите на какое значение нужно увеличить {}: ".format(выбранный_параметр)))
                               
            while увеличение > запас_очков or увеличение < 0:
                print("Ваш запас очков равен - ", запас_очков)
                print("Вы решили увеличить на {}!".format(увеличение))
                увеличение = int(input("Укажите верное значение"))
            # Теперь можно, наконец, увеличить параметр.
            увеличиваемый_параметр = увеличиваемый_параметр + увеличение
            запас_очков = запас_очков - увеличение
            print(сила, увеличиваемый_параметр, увеличение, запас_очков) # данная строка выводит на экран, что переменная - "сила", своё значение не изменила.
           
FishHook
Код программы покажите.
Mixeyka
FishHook
Кода не видно?
FishHook
А, так это программа на питоне? Я думал вы перепутали и кусок одинэса нам показываете.
Вы и дальше в таком же стиле собираетесь писать?
py.user.next
Mixeyka
увеличиваемый_параметр = увеличиваемый_параметр + увеличение
Операция + создаёт новый объект типа int, который связывается с именем увеличиваемый_параметр. Имя сила остаётся связанным с первоначальным объектом типа int.

>>> n = 1
>>> id(n)
1287271584
>>> id(n + 0)
1287271584
>>> id(n + 1)
1287271600
>>>
Mixeyka
py.user.next
Спасибо.

FishHook
Это, конечно, середина работы, но примерно так и пишу.
FishHook
Mixeyka
FishHook
Это, конечно, середина работы, но примерно так и пишу.
А вы вообще в сети или где-то еще много видели примеров программ на кириллице?
Mixeyka
FishHook
Ёпт, ты про это… Не бери в голову.
Budulianin
Mixeyka
Делаю задание по книге, процедурой, так как до функций ещё не добрался.
Нет у нас процедур.
doza_and
Budulianin
Не бери в голову.
У многих в таком виде оно само не лезет. Неплохо указать в начала файла его кодировку а то потом чудеса начнутся.
Для меню наверное лучше использовать Tk или Qt.

По поводу вопроса.
>>> a=2
>>> b=a
>>> id(a)
10025900
>>> id(b)
10025900
>>> b+=1
>>> id(b)
10025888
>>> b
3
2 неизменяемая т.е. константа, поэтому увеличение приводит к созданию новой переменной.
Если переменная изменяемая то поведение будет таким как вы ожидали.
>>> a=[1,2,3]
>>> b=a
>>> b+=[4,5,6]
>>> b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3, 4, 5, 6]
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB