2016-07-12 2 views
1

Хотелось бы отметить, что я использую Discord.py и некоторые из его включенных libs.Проверка наличия индекса в списке

Так что я пытаюсь проверить, существует ли индекс в списке, но я продолжаю получать ValueError, говоря, что индекс не существует в моем списке.

Вот мой код:

def deal_card(self): 
     U = self.usedCards 
     randCard = randchoice(list(self.cards)) 
     if not U: #check if it is empty 
      #if it is empty, just add the card to used cards 
      U.append(randCard) 
     elif U.index(randCard): #check if card is already in the list 
      #if it is, pick another one 
      randCard = randchoice(list(self.cards)) 
      U.append(randCard) 
     else: #check if card is not in list 
      #if it is not, just add it to the used cards 
      U.append(randCard) 
     return randCard 

self.cards полон имена карт и self.usedCards список карт выбраны настройки уже randCard. hand моя команда и P4 это одна из карт в self.cards

Я нашел несколько решений, говоря, что добавление try блока будет решить эту проблему, но я не знаю, как добавить его в середине моего, если заявление.

Заранее благодарен!

+1

Просто к сведению, что не отвечает на вопрос - это сделает ваш код намного проще, если вы просто удаляете выбранную карту из колоды каждый раз, когда вы ее набираете. 'self.shuffle = random.shuffle (self.cards); return self.shuffle.pop() ' –

+0

Спасибо @PaulBecotte, я проверю ваше предложение: ') –

ответ

4

list.index() следует использовать для определения индекса члена списка. Чтобы проверить ли элемент является в списке, просто используйте in:

if not U: 
    # do stuff 
elif randCard in U: 
    # do other stuff 
+0

О, не знал этого. Спасибо вам большое! –

1

Вам не нужно использовать функцию индекса:

elif randCard in U:

+0

Спасибо, Учитель, я этого не знал !!!! –

2

Это, вероятно, ужасный способ иметь дело с вашими картами, потому что тогда у вас есть карты как в вашей отброшенной стопе , так и в вашей колоде.

Почему бы просто не сдвинуть карты?

import random 

cards = ['H{}'.format(val) for val in range(1, 11)] 
print(cards) 
discard_pile = [] 

while cards: 
    random.shuffle(cards) 
    card = cards.pop() 
    print('You drew a {}'.format(card)) 
    discard_pile.append(card) 

while discard_pile: 
    cards.append(discard_pile.pop()) 

# or 

cards.extend(discard_pile) 
discard_pile.clear() 
+0

Я попробую этот метод, спасибо: ') –

1

Если вы еще хотели бы использовать функцию .index по какой-то причине, а не следовать приведенным выше предложения, которые вы могли бы использовать try заявление следующим образом:

try: 
    c = U.index(randCard) 
    randCard = randchoice(list(self.cards)) 
    U.append(randCard) 
except ValueError: 
    U.append(randCard) 
Смежные вопросы