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