Проверка запасов на предмет наличия товара

#python #python-3.x #discord.py #discord.py-rewrite

#python #python-3.x #discord.py #discord.py-переписать

Вопрос:

Я работал над командой под названием «игра», однако для этой команды вам понадобится планшет в вашем инвентаре. Подводя итог, мой вопрос: как вы можете сделать так, чтобы бот проверял, есть ли предмет (планшет) в вашем инвентаре? я боролся с этим в течение последних 3 часов, я несколько раз пытался изменить код, например, изменить файл JSON, чтобы иметь дополнительный уникальная редкость и проверьте с помощью этой редкости, есть ли предмет, однако это также не имело никакого эффекта. Я не получаю никаких ошибок, но и никаких успехов, когда я запускаю команду, ничего не происходит, никаких ошибок, ничего не происходит на сервере. Любая помощь будет признательна!

Команда:

 @client.command()
async def game(ctx):

    await open_account(ctx.author)
    user = ctx.author
    users = await get_bank_data()

    try:
        bag = users[str(user.id)]["bag"]
    except:
        bag = []

    if bag.contains("tablet"):
        await ctx.send("More coding. . .")
    else:
        await ctx.send("Buy a tablet!")
 

Файл JSON:

 {"703287162640007278": {"wallet": 431, "bank": 534404, "bag": [{"item": "milk", "amount": 2}, {"item": "Golden Coin", "amount": 1}, {"item": "alarm", "amount": 1}, {"item": "tablet", "amount": 1}, {"item": "pistol", "amount": 1}]}
 

Ответ №1:

Если я правильно понимаю, bag это список dicts, т.Е. Вы уже получили доступ к ключу 'bag' из файла JSON:

 "bag": [{"item": "milk", "amount": 2}, {"item": "Golden Coin", "amount": 1}, {"item": "alarm", "amount": 1}, {"item": "tablet", "amount": 1}, {"item": "pistol", "amount": 1}]
 

Вам нужно проверить, есть ли таковые, если в любом из этих терминов есть ключ item со значением tablet . Так что:

if any(element['item'] == 'tablet' for element in bag):

РЕДАКТИРОВАТЬ: попробуйте что-то вроде этого:

 bag = users[str(user.id)].get("bag")
print(bag)

# it should print the bag or None
# [{"item": "milk", "amount": 2}, {"item": "Golden Coin", "amount": 1},
# {"item": "alarm", "amount": 1}, {"item": "tablet", "amount": 1}, 
#  {"item": "pistol", "amount": 1}]

if bag:
    if any(element['item'] == 'tablet' and element['amount'] > 0
           for element in bag):
        # do something if tablet in bag
    else:
        # no tablet in bag
else:
    # do something is there is no bag
 

ДЕМОНСТРАЦИЯ:

 bag = [{"item": "milk", "amount": 2}, {"item": "Golden Coin", "amount": 1},
       {"item": "alarm", "amount": 1}, {"item": "tablet", "amount": 1}, 
       {"item": "pistol", "amount": 1}]

if bag:
    if any(element['item'] == 'tablet' and element['amount'] > 0
           for element in bag):
        print('tablet found')
    else:
        print('no tablet in the bag')
else:
    print('no bag')
 

выходной сигнал:

 tablet found
 

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

1. Спасибо! Это решило основную проблему, однако проблема все еще остается, если ‘amount’ = 0, товар все еще есть, но вы ничего не купили. Но еще раз спасибо вам за главную проблему! Теперь я постараюсь бороться с суммой 🙂

2. просто добавьте and element['amount'] > 0 условие

3. также вместо списка dicts может быть лучше реорганизовать его как простой dict, например 'bag':{'milk;:2, 'tablet':1...} . Это значительно упростит доступ.

4. да, я пришел к тому же решению, однако теперь оно не дает мне ошибок и снова не выводит данные на сервер. Я в замешательстве, так как код выглядит хорошо

5. Удалите пробел try except и проверьте, что вы получаете за сумку