#python-3.x #discord.py
#python-3.x #discord.py
Вопрос:
Я создаю бота discord, и у меня возникла проблема с получением значений списка без дополнительных круглых скобок, кавычек или запятых.
вот код:
#gets slots for page
def listindexcheck(slot):
if totalitemcount > slot (page * 9):
return slot (page * 9)
else:
return 0
if argument == 'show':
#message set up
embed = discord.Embed(
title='title',
description='Here is your inventory',
colour=discord.Colour.red())
for i in range(9):
embed.add_field(name=f"Slot ({listindexcheck(i 1)})", value=f'Dur: {str(item_dur[listindexcheck(i 1)])}n'
f'Mod: {str(item_mod[listindexcheck(i 1)])}n'
f'E.lvl: {str(item_level[listindexcheck(i 1)])}n'
f'*id:{str(item_ids[listindexcheck(i 1)])}*n')
embed.set_footer(text='page: ' str(page 1))
msg = await ctx.send(embed=embed)
print (type(str(item_ids[listindexcheck(i 1)])))
и вот вывод
Тип данных перед преобразованием их в строку — список
я попытался перевести значения в строковый тип, чтобы избавиться хотя бы от кавычек, но это не сработало
Мой вопрос в том, есть ли способ просто получить значения, не делая ничего дополнительного к нему?
Спасибо
Комментарии:
1. Может быть, сделать
str(item_dur[listindexcheck(i 1)][0])
, чтобы получить только первый элемент кортежа.2. @bubulledu93 это работает отлично, почему? это потому, что данные, которые я получаю, представляют собой кортеж только с одним значением? в любом случае это самый простой способ на данный момент, поэтому, если бы вы могли превратить это в ответ, который был бы приятным, и спасибо
Ответ №1:
Судя по всему, item_dur[listindexcheck(i 1)
, item_mod[listindexcheck(i 1)
item_level[listindexcheck(i 1)
item_ids[listindexcheck(i 1)
это кортежи только с одним элементом внутри. Почему внутри круглой скобки стоит запятая? Это потому, что запятая создает кортеж, а не скобку.
Поэтому, чтобы не получать круглые скобки и запятую при их печати, вы можете просто получить первый элемент кортежа следующим образом item_dur[listindexcheck(i 1)][0]
.
Ответ №2:
После того, как вы превратили это в строку, вы можете использовать метод replace(), чтобы удалить все лишние фрагменты, которые вам там не нужны. Вы бы заменили все, что вам там не нужно, на ''
, чтобы просто удалить это из строки.
Вот некоторая информация о методе replace():https://www.w3schools.com/python/ref_string_replace.asp
Комментарии:
1. Разве я не должен сначала привести это к переменной, чтобы сделать это? Я попробую это позже
2. Возможно, вы сможете добавить его в свой код в качестве дополнительного исполняемого метода, например, print (type(str(item_ids[listindexcheck(i 1)]).replace(«(«).replace(«)»))). Но я не уверен в этом. Если нет, вам придется создать дополнительную переменную yes.
Ответ №3:
Вы можете использовать string.replace
, и будет лучше, если вы создадите функцию для этого следующим образом:
def delete_brackets(text: str):
return text.replace(')', '').replace(')', '').replace(',', '')
embed.add_field(name=f"Slot ({listindexcheck(i 1)})", value=f'Dur: {delete_brackets(str(item_dur[listindexcheck(i 1)]))}n'
f'Mod: {delete_brackets(str(item_mod[listindexcheck(i 1)]))}n'
f'E.lvl: {delete_brackets(str(item_level[listindexcheck(i 1)]))}n'
f'*id:{delete_brackets(str(item_ids[listindexcheck(i 1)]))}*n')
Итак, это сработает для вас.