Почему мой индекс не может найти элемент в списке? - PullRequest
0 голосов
/ 20 апреля 2019

Ошибка функции индекса в списке, созданном с использованием методов цикла и добавления.

Я новичок, поэтому не могу понять проблему.

from random import shuffle
class Cards:
    suits = [ 'Spades' , 'Hearts' , 'Diamonds' , 'Clubs' ]
    faces = [ '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '10' , 'Jack' , 
              'Queen' , 'King' , 'Ace' ]   
    def __init__ ( self , suit , face):
        '''suit and value should be integers'''
        self.suit = suit
        self.face = face
    def __repr__(self):
        return ('{} of {}').format(self.faces[self.face]
                ,self.suits[self.suit])
class Deck:
    def __init__(self):
        self.deckoc = []
        self.shufdoc = []
        for x in range (4):
            for y in range (13):
                self.deckoc.append(Cards(x,y))
                self.shufdoc.append(Cards(x,y))      
        shuffle (self.shufdoc)    
while True:
    newhand = Deck()    
    c1 = (newhand.shufdoc.pop())
    c2 = (newhand.shufdoc.pop())
    print (c1,c2)
    print (newhand.deckoc.index(c1))    
    print (newhand.shufdoc)
    print (newhand.deckoc) 
    a = input('asd?')
    if a == 'q':
        break

Мне бы хотелоськод для печати номера индекса, но он получает ошибку «нет в списке».

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

См. Ответ Дэниэла на проблему с вашей логикой.Но я бы предложил переделать вашу логику.Нет причин иметь сложные индексы или две разные колоды.

Вот как я создаю колоды в покерной программе, которую я создал:

for _ in range(decks_):
    for val in (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14):
        for suit in ("Hearts", "Spades", "Clubs", "Diamonds"):
            self.cards.append(Card(val, suit))

    if self.shuffle_cards:
            shuffle(self.cards)

У вас нет нескольких колод, поэтому выВам не нужен первый цикл for, если вы не хотите добавлять больше колод в будущем.

Вы можете определить словари именования следующим образом:

value_names = {2: 'Two', 3: 'Three', 4: 'Four', 5: 'Five', 6: 'Six', 7: 'Seven', 8: 'Eight', 9: 'Nine',
               10: 'Ten', 11: 'Jack', 12: 'Queen', 13: 'King', 14: 'Ace'}

suit_names = {"Hearts": '♥', "Spades": '♠', "Clubs": '♣', "Diamonds": '♦'}

И затем определить класс вашей карты какитак:

class Card:
    """A class containing the value and suit for each card"""
    def __init__(self, value, suit):
        self.value = value
        self.suit = suit
        self.vname = value_names[value]
        self.sname = suit_names[suit]
0 голосов
/ 20 апреля 2019

Вы создаете два независимых Card экземпляра для каждой карты.Поэтому in не может найти экземпляр одного списка в другом.

Просто скопируйте список:

class Deck:
    def __init__(self):
        self.deckoc = []
        self.shufdoc = []
        for x in range (4):
            for y in range (13):
                self.deckoc.append(Cards(x,y))
        self.shufdoc = list(self.deckoc)
        shuffle(self.shufdoc)    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...