Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 28, 2014 13:45:39

Mixeyka
Зарегистрирован: 2014-09-19
Сообщения: 32
Репутация: +  1  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

Делаю задание по книге, процедурой, так как до функций ещё не добрался. Проблема возникла во время присваивания.

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

Вот код:


# Генератор Персонажей
# 
# Смысл задачи, составить программу в которой пользователь, распределяет
# параметры по характеристикам героя.
МЕНЮ = ("""
Выберите, пункт меню:
   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(сила, увеличиваемый_параметр, увеличение, запас_очков) # данная строка выводит на экран, что переменная - "сила", своё значение не изменила.
           

Отредактировано Mixeyka (Сен. 28, 2014 13:46:36)

Офлайн

#2 Сен. 28, 2014 13:47:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

Код программы покажите.



Офлайн

#3 Сен. 28, 2014 13:48:35

Mixeyka
Зарегистрирован: 2014-09-19
Сообщения: 32
Репутация: +  1  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

FishHook
Кода не видно?

Офлайн

#4 Сен. 28, 2014 13:51:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

А, так это программа на питоне? Я думал вы перепутали и кусок одинэса нам показываете.
Вы и дальше в таком же стиле собираетесь писать?



Офлайн

#5 Сен. 28, 2014 13:58:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

Mixeyka
увеличиваемый_параметр = увеличиваемый_параметр + увеличение
Операция + создаёт новый объект типа int, который связывается с именем увеличиваемый_параметр. Имя сила остаётся связанным с первоначальным объектом типа int.

>>> n = 1
>>> id(n)
1287271584
>>> id(n + 0)
1287271584
>>> id(n + 1)
1287271600
>>>



Отредактировано py.user.next (Сен. 28, 2014 13:58:53)

Офлайн

#6 Сен. 28, 2014 14:13:16

Mixeyka
Зарегистрирован: 2014-09-19
Сообщения: 32
Репутация: +  1  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

py.user.next
Спасибо.

FishHook
Это, конечно, середина работы, но примерно так и пишу.

Офлайн

#7 Сен. 28, 2014 14:18:16

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

Mixeyka
FishHook
Это, конечно, середина работы, но примерно так и пишу.
А вы вообще в сети или где-то еще много видели примеров программ на кириллице?



Офлайн

#8 Сен. 28, 2014 14:22:07

Mixeyka
Зарегистрирован: 2014-09-19
Сообщения: 32
Репутация: +  1  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

FishHook
Ёпт, ты про это… Не бери в голову.

Офлайн

#9 Сен. 28, 2014 18:41:57

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

Mixeyka
Делаю задание по книге, процедурой, так как до функций ещё не добрался.
Нет у нас процедур.



Офлайн

#10 Сен. 28, 2014 21:47:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Переменная - это ведь ссылка?

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]



Отредактировано doza_and (Сен. 28, 2014 21:49:21)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version