#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. Я думаю, это выглядит лучше, но это не отвечает на мой вопрос.