Изменение переменной в функции def

#python #python-3.x

#python #python-3.x

Вопрос:

Хорошо, странный вопрос. Итак, я создаю текстовую приключенческую игру для школьного проекта, и я создаю систему магазинов. Предполагается, что вы можете покупать только по одному из каждого предмета, за исключением зелий.

 schoice = str(input("> "))
def shopresults(item, itemvar, price):
  if schoice == str(item):
    if itemvar == 0 and gold >= price:
      print("Here ya go! One "   str(item)   " coming  right up!")
      # itemvar = 1 this should change the variable determining the status of the item, e.g. swordfire1 or swordfire2  
      gold == gold - price
      if item == "fire sword" or itemvar == "water sword" or itemvar == "thunder sword":
         freesword = 0
         elif itemvar == 1 and (item != potion1 or item != potion2 or item != potion3):
            print("You already have that, kiddo!")
         elif gold < price:
            print("You're a little short on gold there, bud...")
shopresults("fire sword", swordfire1, (100 - (100 * freesword)))
shopresults("flame sword", swordfire2, 500)
  

Как мне изменить переменную, которая вызывается до того, как вы попадете в программу shopresults, в данном случае swordfire1, вместо самого itemvar ? swordfire1 определяет, есть ли у вас 1-й огненный меч, и для каждого оружия есть такие переменные. Игнорируйте переменную freesword, вы в основном получаете один бесплатный меч в игре, и это не проблема, насколько я знаю. Я знаю, что это сбивает с толку, но, пожалуйста, помогите, если можете.

Комментарии:

1. это весь ваш код? что такое swordfire1 и swordfire2?

2. @ppwater О нет, это еще не все, я просто урезал его, чтобы сэкономить место. swordfire1 определяет, являетесь ли вы владельцем 1-го уровня fire sword, а swordfire2 определяет 2-й уровень. Они должны быть определены ранее в коде.

3. вы можете просто ввести весь свой код

4. Это более 200 строк кода, и большая его часть не относится к моей проблеме.

Ответ №1:

Наверное, мне интересно, каково значение swordfire1 and swordfire2 — они выглядят как целые числа? Я думаю, вам следует подумать о создании объектов оружия и ведении реестра оружия. На основе статуса вызовите свой реестр и верните свой объект weapon в эту переменную. Когда я говорю registry, вы можете использовать простой dict или создать шаблон, подобный factory.

Комментарии:

1. Да, это целые числа, но у них есть только 0 или 1. Спасибо за ваш ответ, но я не думаю, что смогу это использовать, поскольку мы не изучали это в классе.

2. Ну, если у вас есть только 0 или 1, почему бы просто не поменять переменную на противоположное целое число, т.е. Если 0 itemvar = 1, если 1 itemvar = 0? @pythonnoob02

3. Проблема с изменением itemvar заключается в том, что он не изменяет исходную переменную, то есть swordfire1 . Я пытаюсь ее изменить, но я не уверен, как это сделать в более общем смысле.

4. допустим, мы выполняем shopresults("fire sword", swordfire1, (100 - (100 * freesword))) , и вы хотите, чтобы swordfire1 сказал то же самое. shopresults("flame sword", swordfire2, 500) ожидаете ли вы, что при запуске swordfire2 на самом деле будет содержать значение swordfire1?

5. Нет, оно должно содержать значение swordfire2 . Здесь позвольте мне разбить это методом грубой силы: и т.д. if item == "fire sword": swordfire1 = 1 elif item == "flame sword": swordfire2 = 1

Ответ №2:

Присвоение переменной выполняется с = помощью not == . И вам нужно объединить условия с круглыми скобками:

 schoice = str(input("> "))
def shopresults(item, itemvar, price):
  if schoice == str(item):
    if (itemvar == 0) and (gold >= price):
      print("Here ya go! One "   str(item)   " coming  right up!")
      # itemvar = 1 this should change the variable determining the status of the item, e.g. swordfire1 or swordfire2  
      gold = gold - price
      if (item == "fire sword") or (itemvar == "water sword") or (itemvar == "thunder sword"):
         freesword = 0
         elif (itemvar == 1) and (item != potion1) or (item != potion2) or (item != potion3):
            print("You already have that, kiddo!")
         elif gold < price:
            print("You're a little short on gold there, bud...")

shopresults("fire sword", swordfire1, (100 - (100 * freesword)))
shopresults("flame sword", swordfire2, 500)
  

Комментарии:

1. Если они помогут вам понять это, тогда все в порядке, но я не думаю, что вам нужны круглые скобки.

2. Я думаю, это выглядит лучше, но это не отвечает на мой вопрос.