Python 3.x Python 3:对象没有属性

Python 3.x Python 3:对象没有属性,python-3.x,Python 3.x,我需要你在这些代码上的帮助。我得到这个错误:“卡片对象没有属性'equal_rank'。下面是两个文件中的代码。基本上,我不允许修改cards.py文件。我的代码在main.py中 main.py import cards #call deck lmdeck = cards.Deck() #display message print("=======messy print

我需要你在这些代码上的帮助。我得到这个错误:“卡片对象没有属性'equal_rank'。下面是两个文件中的代码。基本上,我不允许修改cards.py文件。我的代码在main.py中

main.py

            import cards

            #call deck
            lmdeck = cards.Deck()

            #display message
            print("=======messy print a deck========")

            #display lDck
            print(lmdeck)

            #call method
            a_card = lmdeck.deal()

            #display message
            print("Card dealt is:", a_card)

            #display message
            print('Cards left:', len(lmdeck))

            #display message
            print("Is deck empty?", lmdeck.is_empty())

            #define hand
            lHndlist1 = []

            #define hand
            lHndlist2 = []

            #loop
            for li in range(5):

                #call method
                lHndlist1.append(lmdeck.deal())

                #call method
                lHndlist2.append(lmdeck.deal())

            #display message

            print("\nHand 1:", lHndlist1)

            #display message
            print("Hand 2:", lHndlist2)

            #display
            print()

            #define hand 1
            lLastCrdHnd1 = lHndlist1.pop()

            #define hand 1
            lLastCrdHnd2 = lHndlist2.pop()

            #display message
            print("Hand1 threw down", lLastCrdHnd1, ", Hand2 threw down", lLastCrdHnd2)

            #display message
            print("Hands are now:", lHndlist1, lHndlist2)

            #check condition
            if lLastCrdHnd1.equal_rank(lLastCrdHnd2):

                #display message
                print(lLastCrdHnd1, lLastCrdHnd2, "of equal rank")

            #otherwise
            elif lLastCrdHnd1.get_rank() > lLastCrdHnd2.get_rank():

                #display message
                print(lLastCrdHnd1, "of higher rank than", lLastCrdHnd2)

            #otherwise

            else:

                #display message
                print(lLastCrdHnd2, "of higher rank than", lLastCrdHnd1)

            #check condition
            if lLastCrdHnd1.equal_value(lLastCrdHnd2):

                #display message
                print(lLastCrdHnd1, lLastCrdHnd2, "of equal value")

            #otherwise
            elif lLastCrdHnd1.get_value() > lLastCrdHnd2.get_value():

                #display message
                print(lLastCrdHnd1, "of higher value than", lLastCrdHnd2)

            #otherwise
            else:

                #display message
                print(lLastCrdHnd2, "of higher value than", lLastCrdHnd1)

            #check condition
            if lLastCrdHnd1.equal_suit(lLastCrdHnd2):

                #display message
                print(lLastCrdHnd1, 'of equal suit with', lLastCrdHnd2)

            #otherwise
            else:

                #display message
                print(lLastCrdHnd1, 'of different suit than', lLastCrdHnd2)

            #define list
            foundation_list = [[], [], [], []]

            #define column
            column = 0

            #loop
            while not lmdeck.is_empty():

                #append
                foundation_list[column].append(lmdeck.deal())

                #update column
                column += 1

                #check condition
                if column % 4 == 0:

                    #set value
                    column = 0

            #loop
            for li in range(4):

                #display message
                print("foundation", li, foundation_list[li])


            #define function
            def lGet1Par(cards):

                cards.sort(key=lambda card: card.get_rank())

                #loop
                for lStrt in range(len(cards) - 2 + 1):
                    if cards [lStrt].get_rank() == cards[lStrt + 1].get_rank():
                        return cards[lStrt:lStrt + 2]
                return []

            #define function
            def lGet2Par(cards):
                lOnePair = lGet1Par(cards)
                if lOnePair:
                    remaining = [c for c in cards if c not in lOnePair]
                    another_pair = lGet1Par(remaining)
                    if another_pair:
                        lOnePair.extend(another_pair)
                        return lOnePair
                return []

            #define function
            def lGetstgtflsh(cards):
                #sort the cards by their ranks
                cards.sort(key=lambda card: card.get_rank())

                #check each possibility
                for lStrt in range(len(cards) - 5 + 1):
                    end = lStrt + 1
                    while end < len(cards):
                        if cards[end].get_suit() != cards[end - 1].get_suit():
                            break
                        if cards[end].get_rank() - cards[end - 1].get_rank() != 1:
                            break
                        end = end + 1
                    if end - lStrt >=5: #found
                        return cards[lStrt:lStrt + 5]
                return

            #define function
            def lGet4ofKnd(cards):

                cards.sort(key=lambda card: card.get_rank())
                for lStrt in range(len(cards) - 4 + 1):
                    if cards[lStrt].get_rank() == cards[lStrt + 3].get_rank():
                        return cards[lStrt:lStrt + 4]
                return []

            #define function
            def lGet3ofKnd(cards):

                cards.sort(key=lambda card: card.get_rank())
                for lStrt in range(len(cards) - 3 + 1):
                    if cards[lStrt].get_rank() == cards[lStrt + 2].get_rank():
                        return cards [lStrt:lStrt + 3]
                return []

            #define function
            def lGetFllHse(cards):
                l3 = lGet3ofKnd(cards)
                if l3:
                    remaining = [c for c in cards if c not in l3]
                    pair = lGet1Par(remaining)
                    if pair:
                        l3.extend(pair)
                        return l3
                return []

            #define function
            def lGetFlsh(cards):

                cards.sort(key=lambda card: card.get_suit())

                for lStrt in range(len(cards) - 5 + 1):
                    if cards[lStrt].get_suit() == cards[lStrt + 4].get_suit():
                        return cards[lStrt:lStrt + 5]
                return []

            #define function

            def lGetStgth(cards):

                cards.sort(key=lambda card: card.get_rank())

                for lStrt in range(len(cards) - 5 + 1):
                    end = lStrt + 1
                    while end < len(cards):
                        if cards[end].get_rank() - cards[end - 1]. get_rank() != 1:
                            break
                        end = end + 1
                    if end - lStrt >= 5:
                        return cards[lStrt:lStrt + 5]
                return []


            #define function
            def test():
                c = [cards.Card(1, 1), cards.Card(7, 1), cards.Card(6, 1), cards.Card(8, 1), card.Cards(9, 1), cards.Card(10, 1), cards.Card(3, 1)]
                print(lGetstgtflsh(c))

                c = [cards.Card(1, 1), cards.Card(7, 1), cards.Card(6, 2), cards.Card(8, 1), cards.Card(9, 1), cards.Card(10, 2), cards.Card(11, 1)]
                print(lGetstgtflsh(c))

                c = [cards.Card(1, 1), cards.Card(1, 2), cards.Card(1, 3), cards.Card(1, 4), cards.Card(9, 1), cards.Card(10, 2), cards.Card(11, 1)]
                print(lGet4ofKnd(c))

                c = [cards.Card(3, 1), cards.Card(1, 2), cards.Card(1, 3), cards.Card(1, 4), cards.Card(9, 1), cards.Card(10, 2), cards.Card(11, 1)]
                print(lGet4ofKnd(c))
                print (lGet3ofKnd(c))

                c = [cards.Card(3, 1), cards.Card(3, 2), cards.Card(1, 3), cards.Card(1, 4), cards.Card(9, 1), cards.Card(10, 2), cards.Card(11, 1)]
                print(lGet2Par(c))
                print(lGet1Par(c))

                c = [cards.Card(3, 1), cards.Card(3, 2), cards.Card(1, 3), cards.Card(1, 1), cards.Card(9, 1), cards.Card(10, 1), cards.Card(11, 1)]
                print(lGetFlsh(c))

                c = [cards.Card(1, 1), cards.Card(7, 2), cards.Card(6, 1), cards.Card(8, 1), cards.Card(9, 1), cards.Card(10, 1), cards.Card(3, 1)]
                print(lGetStgth(c))

                c = [cards.Card(1, 1), cards.Card(1, 2), cards.Card(1, 3), cards.Card(8, 1), cards.Card(9, 1), cards.Card(10, 1), cards.Card(8, 2)]
                print(lGetFllHse(c))

                c = [cards.Card(1, 1), cards.Card(1, 2), cards.Card(2, 3), cards.Card(8, 1), cards.Card(9, 1), cards.Card(10, 1), cards.Card(8, 2)]
                print(lGetFllHse(c))
                print(lGet2Par(c))

            #define function
            def get(player1, player2, category):
                if category == 'straight flush':
                    return(lGetstgtflsh(player1), lGetstgtflsh(player2))
                if category == '4 of a kind':
                    return(lGet4ofKnd(player1), lGet4ofKnd(player2))
                if category == 'full house':
                    return(lGetFllHse(player1), lGetFllHse(player2))
                if category == 'flush':
                    return(lGetFlsh(player1), lGetFlsh(player2))
                if category == 'straight':
                    return(lGetStgth(player1), lGetStgth(player2))
                if category == '3 of a kind':
                    return(lGet3ofKnd(player1), lGet3ofKnd(player2))
                if category == '2 pair':
                    return(lGet2Par(player1), lGet2Par(player2))
                if category == '1 pair':
                    return(lGet1Par(player1), lGet1Par(player2))
                return (player1, player2)

            #define main function

            def main():

                lDck = cards.Deck()
                lDck.shuffle()

                while True:
                    print("---------------------------")
                    print("Let's play poker!")

                    community_cards = []
                    player1_cards = []
                    player2_cards = []

                    player1_cards.append(lDck.deal())
                    player2_cards.append(lDck.deal())
                    player1_cards.append(lDck.deal())
                    player2_cards.append(lDck.deal())

                    for li in range(5):
                        community_cards.append(lDck.deal())
                    print()
                    print("Community cards: %s" % (community_cards))
                    print("Player 1: %s" % (player1_cards))
                    print("Player 2: %s" % (player2_cards))
                    print()

                    player1_cards.extend(community_cards)
                    player2_cards.extend(community_cards)

                    for category in ('straight flush', '4 of a kind', 'full house', 'flush', 'straight', '3 of a kind', '2 pair', '1 pair', 'high card'):
                        player1, player2 = get(player1_cards, player2_cards, category)

                        if player1 and player2:
                            print("TIE with a %s: %s" % (category, player1))
                            break
                        elif player1 and not player2:
                            print("Player %d wins with a %s: %s" % (1, category, player1))
                            break
                        elif not player1 and player2:
                            print("Player %d wins with a %s: %s" % (2, category, player2))
                            break

                        if lDck.cards_count() < 9:
                            print("Deck has too few cards so game is done.")
                            break

                        print()

                        c = input("Do you wish to play another hand? (Y or N")
                        if c not in ('y', 'Y'):
                            break

            if __name__ == '__main__':
                main()
            import random

            class Card( object ):


                # Rank is an int (1-13), where aces are 1 and kings are 13.
                # Suit is an int (1-4), where clubs are 1 and spades are 4.
                # Value is an int (1-10), where aces are 1 and face cards are 10.

                # List to map int rank to printable character (index 0 used for no rank)
                rank_list = ['x','A','2','3','4','5','6','7','8','9','10','J','Q','K']

                # List to map int suit to printable character (index 0 used for no suit)
                # 1 is clubs, 2 is diamonds, 3 is hearts, and 4 is spades
                # suit_list = ['x','c','d','h','s']  # for systems that cannot print Unicode symbols
                suit_list = ['x','\u2663','\u2666','\u2665','\u2660']

                def __init__( self, rank=0, suit=0 ):
                    """ Initialize card to specified rank (1-13) and suit (1-4). """
                    self.__rank = 0
                    self.__suit = 0
                    self.__face_up = None
                    # Verify that rank and suit are ints and that they are within
                    # range (1-13 and 1-4), then update instance variables if valid.
                    if type(rank) == int and type(suit) == int:
                        if rank in range(1,14) and suit in range(1,5):
                            self.__rank = rank
                            self.__suit = suit
                            self.__face_up = True

                def rank( self ):
                    """ Return card's rank (1-13). """
                    return self.__rank

                def value( self ):
                    """ Return card's value (1 for aces, 2-9, 10 for face cards). """
                    # Use ternary expression to determine value.
                    return self.__rank if self.__rank < 10 else 10

                def suit( self ):
                    """ Return card's suit (1-4). """
                    return self.__suit

                def is_face_up( self ):
                    """ Returns True if card is facing up."""
                    return self.__face_up

                def flip_card( self ):
                    """ Flips card between face-up and face-down"""
                    self.__face_up = not self.__face_up

                def __str__( self ):
                    """ Convert card into a string (usually for printing). """
                    # Use rank to index into rank_list; use suit to index into suit_list.
                    if self.__face_up:
                        return "{}{}".format( (self.rank_list)[self.__rank], \
                                          (self.suit_list)[self.__suit] )
                    else:
                        return "{}{}".format( "X", "X")

                def __repr__( self ):
                    """ Convert card into a string for use in the shell. """
                    return self.__str__()

                def __eq__( self, other ):
                    """ Return True, if Cards of equal rank and suit; False, otherwise. """
                    if not isinstance(other, Card):
                        return False

                    return self.rank() == other.rank() and self.suit() == other.suit()

            class Deck( object ):


                # Implement the deck as a list of cards.  The last card in the list is
                # defined to be at the top of the deck.

                def __init__( self ):
                    """ Initialize deck--Ace of clubs on bottom, King of spades on top. """
                    self.__deck = [Card(r,s) for s in range(1,5) for r in range(1,14)]

                def shuffle( self ):
                    """ Shuffle deck using shuffle method in random module. """
                    random.shuffle(self.__deck)

                def deal( self ):
                    """ Return top card from deck (return None if deck empty). """
                    # Use ternary expression to guard against empty deck.
                    return self.__deck.pop() if len(self.__deck) else None

                def is_empty( self ):
                    """ Return True if deck is empty; False, otherwise """
                    return len(self.__deck) == 0

                def __len__( self ):
                    """ Return number of cards remaining in deck. """
                    return len(self.__deck)

                def __str__( self ):
                    """ Return string representing deck (usually for printing). """
                    return ", ".join([str(card) for card in self.__deck])

                def __repr__( self ):
                    """ Return string representing deck (for use in shell). """
                    return self.__str__()

                def display( self, cols=13 ):
                    """ Column-oriented display of deck. """
                    for index, card in enumerate(self.__deck):
                        if index%cols == 0:
                            print()
                        print("{:3s} ".format(str(card)), end="" )
                    print()
                    print()
导入卡
#呼叫台
lmdeck=cards.Deck()
#显示消息
打印(“=====================================”)
#显示lDck
打印(lmdeck)
#调用方法
a_card=lmdeck.deal()
#显示消息
打印(“处理的卡是:”,一张U卡)
#显示消息
打印('卡片左:',len(lmdeck))
#显示消息
打印(“数据组是否为空?”,lmdeck.Is_empty())
#定义手
lHndlist1=[]
#定义手
lHndlist2=[]
#环路
对于范围(5)内的li:
#调用方法
lHndlist1.append(lmdeck.deal())
#调用方法
lHndlist2.append(lmdeck.deal())
#显示消息
打印(“\n与1:”,lHndlist1)
#显示消息
打印(“手动2:”,lHndlist2)
#展示
打印()
#定义手1
lLastCrdHnd1=lHndlist1.pop()
#定义手1
lLastCrdHnd2=lHndlist2.pop()
#显示消息
打印(“手1扔下”,lLastCrdHnd1,“手2扔下”,lLastCrdHnd2)
#显示消息
打印(“手现在是:”,lHndlist1,lHndlist2)
#检查条件
如果lLastCrdHnd1.equal_秩(lLastCrdHnd2):
#显示消息
印刷品(lLastCrdHnd1、lLastCrdHnd2,“同等等级”)
#否则
elif lLastCrdHnd1.get_rank()>lLastCrdHnd2.get_rank():
#显示消息
打印(lLastCrdHnd1,“级别高于”,lLastCrdHnd2)
#否则
其他:
#显示消息
打印(lLastCrdHnd2,“级别高于”,lLastCrdHnd1)
#检查条件
如果lLastCrdHnd1.等于_值(lLastCrdHnd2):
#显示消息
印刷品(lLastCrdHnd1、lLastCrdHnd2,“同等价值”)
#否则
elif lLastCrdHnd1.get_value()>lLastCrdHnd2.get_value():
#显示消息
打印(lLastCrdHnd1,“值高于”,lLastCrdHnd2)
#否则
其他:
#显示消息
打印(lLastCrdHnd2,“值高于”,lLastCrdHnd1)
#检查条件
如果lLastCrdHnd1.同等诉讼(lLastCrdHnd2):
#显示消息
印刷品(lLastCrdHnd1,'与'lLastCrdHnd2'同等适合)
#否则
其他:
#显示消息
印花(lLastCrdHnd1,'与'lLastCrdHnd2'不同的套装)
#定义列表
基金会清单=[]、[]、[]、[]、[]
#定义列
列=0
#环路
而不是lmdeck.is_empty():
#附加
基础列表[列].append(lmdeck.deal())
#更新列
列+=1
#检查条件
如果列%4==0:
#设定值
列=0
#环路
对于范围(4)内的li:
#显示消息
打印(“基础”,li,基础列表[li])
#定义函数
def lGet1Par(卡):
cards.sort(key=lambda card:card.get_rank())
#环路
对于范围内的lStrt(透镜(卡片)-2+1):
如果卡片[lStrt]。获取等级()==卡片[lStrt+1]。获取等级():
返回卡[lStrt:lStrt+2]
返回[]
#定义函数
def lGet2Par(卡):
lOnePair=lGet1Par(卡)
如果是lOnePair:
剩余=[c表示卡中的c,如果c不在lOnePair中]
另一对=lGet1Par(剩余)
如果另一个_对:
lOnePair.extend(另一对)
返回lOnePair
返回[]
#定义函数
def lGetstgtflsh(卡片):
#按等级对牌进行排序
cards.sort(key=lambda card:card.get_rank())
#检查每种可能性
对于范围内的lStrt(透镜(卡片)-5+1):
结束=lStrt+1
当结束=5:#找到
返回卡[lStrt:lStrt+5]
返回
#定义函数
def lGet4ofKnd(卡片):
cards.sort(key=lambda card:card.get_rank())
对于范围内的lStrt(透镜(卡片)-4+1):
如果卡片[lStrt]。获取等级()==卡片[lStrt+3]。获取等级():
返回卡[lStrt:lStrt+4]
返回[]
#定义函数
def lGet3ofKnd(卡片):
cards.sort(key=lambda card:card.get_rank())
对于范围内的lStrt(透镜(卡片)-3+1):
如果卡片[lStrt]。获取等级()==卡片[lStrt+2]。获取等级():
返回卡[lStrt:lStrt+3]
返回[]
#定义函数
def lGetFllHse(卡片):
l3=lGet3ofKnd(卡片)
如果l3: