【发布时间】:2020-09-22 05:57:36
【问题描述】:
我对 Python 比较了解,但我决定使用类创建一个高低牌游戏。我已经完成了所有课程的设置和一切,但我遇到的唯一问题是当我尝试查看来自playerHand 的卡是大于还是小于来自nextCard 的卡时。 playerHand 和 nextCard 都与类相关,我得到的错误是:TypeError: '>' not supported between instances of 'Person' and 'NextCard'。
有 100% 是更好的方法来做到这一点,但这是我目前所得到的:
import random
class Card(object):
def __init__(self, suit, value):
self.suit = suit
self.value = value
def show(self):
print ("{} of {}".format(self.value, self.suit))
class Deck(object):
def __init__(self):
self.cards = []
self.build()
def build(self):
for suit in ["Spades", "Clubs", "Diamonds", "Hearts"]:
for value in ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]:
self.cards.append(Card(suit, value))
def show(self):
for card in self.cards:
card.show()
def shuffle(self):
for n in range(len(self.cards)-1,0,-1):
r = random.randint(0, n)
self.cards[n], self.cards[r] = self.cards[r], self.cards[n]
def drawCard(self):
return self.cards.pop()
class Person(object):
def __init__(self):
self.hand = []
def draw(self, deck):
self.hand.append(deck.drawCard())
return self
def show(self):
for card in self.hand:
card.show()
class NextCard(object):
def __init__(self):
self.nextcard = []
def draw(self, deck):
self.nextcard.append(deck.drawCard())
return self
def show(self):
for card1 in self.nextcard:
card1.show()
deck = Deck()
deck.shuffle()
human = Person()
playerHand = human.draw(deck)
newcard = NextCard()
nextCard = newcard.draw(deck)
play = input("Do you want to play High/Low? Y or N? ")
while play.lower()== "y":
card = playerHand
print("The current card is: ", str(card.show()))
guess = input("Guess H for high or L for low." )
if guess.lower()=="h":
if card > nextCard:
print("Congratulations! You guessed correctly! The next card was ", card)
play = input("Play again? Y or N? ")
if card < nextCard:
print("You lost! The next card was ", nextCard)
play = input("Play again? Y or N? ")
if guess.lower()=="l":
if card > nextCard:
print("You lost! The next card was ", nextCard)
play = input("Play again? Y or N? ")
if card < nextCard:
print("Congratulations! You guessed correctly! The next card was ", nextCard)
else:
print("The game is over.")
对于类之间比较问题的任何解决方案或变通方法将不胜感激。这是用 python 3 编码的。
【问题讨论】:
-
你的课有卡的价值吗?然后你可以做
if card.value > nextcard.value(或通过getter函数等)你也可以让你的类具有可比性,比如this -
我有一个包含所有卡片花色和数值的套牌类,还有一个单独的卡片类,它只是结合了套牌类中的两个变量
-
我认为您需要分享更多信息。如果我们无法重现您的问题,则无法为您提供帮助。尝试创建一个最小的可重现代码-sn-p。例如。你的问题可以归结为
card < nextCard抛出你提到的异常。 -
您的问题是关于使用类的,这里没有一个类...我们能提供什么帮助?请提供minimal reproducible example。至少显示
playerHand和nextCard是什么。顺便说一句,您应该遵循 PEP-8 的names_with_under_scores而不是类似 Java 的CamelCase。所以应该是player_hand和next_card -
从错误消息
playerHand必须是类Person的实例,所以声明card = playerHand没有意义。如果不查看类定义(可能还有程序中的其他逻辑),就不可能进一步帮助您。
标签: python python-3.x