制作扑克牌的程序存在问题

时间:2014-10-27 23:27:18

标签: python class

本练习应该创建一个制作扑克牌的课程。

在与我(稍微鄙视)的CS教授通电话45分钟后,我不能让这两件事停止发生在这里 1)列表名称(RANKS)绘制此错误 NameError:全局名称' RANKS'未定义

2)卡片名称应该拼写出来(即card1 =(#34; h"应该成为"心灵的王牌")但我一直得到(1) " h")

我不想放弃课程。我需要更直接的帮助。她试图成为一个我欣赏的社交,但我太初学了。我需要学习规则,我无法猜测它们。提前谢谢。

南希

class Card(object):
    """ creates a playing card
    first: lists and dictionaries for program"""

    RANKS = ["0", "Ace", "2", "3", "4", "5", "6", "7",
             "8", "9", "10", "Jack", "Queen", "King"]
    SUITS = {"c":"Clubs", "d":"Diamonds", "h":"Hearts", "s":"Spades"}

    def __init__(self, rank, suit):  # initializes the process
        self.rank = rank
        self.suit = suit

    def getRank(self):  # gets rank of card
        if self.rank in RANKS:
            RANKS[self.rank] = self.rank
            return self.rank

    def getSuit(self, SUITS=None):  # gets suit of card in a full word
        if self.suit in SUITS:
            SUITS[self.suit] = self.suit
            return self.suit


    def __str__(self):  # to make the strings to answer the problems
        return "Card is %r of %s" % (RANKS[self.rank], SUITS[self.suit])

card1 = Card(1, "h")
print (card1)
card2 = Card(3, "c")
print (card2)

2 个答案:

答案 0 :(得分:1)

这里有很多问题。最直接的一个导致你的 错误是因为您已经定义了列表RANKS和字典 在您的Card类中的SUITS,它们必须被称为Card.RANKS 和Card.SUITS,甚至分别来自班级内。

使用简单数字进行排名的想法,用于索引 等级名称列表作为文本,很好。同样,使用一个角色 对于西装和使用它来查找字典是好的。但是方式 你试图在你的getRank()和getSuit()函数中做错了。

getRank()应该取值self.rank并返回元素 该索引的列表 - 所以要查看它是否有效,您需要检查 合法索引值的值,而不是列表值。 其次,RANKS和SUITS值应视为常数, 那么你为什么要在这里改变它们呢?最后,既然你有 no else子句,如果rank值不好,getRank()返回None。

getSuit()有所有这些问题,而且你有一个无用的论点 无缘无故地传递此外,您要检查套装值 针对字典中的可用键,所以“in”是正确的 这样做的方法。

你的 str 函数应该调用getRank()和getSuit()来获取它 他们的错误处理的好处,并可能,你可以 稍后更改实现,并且应该使用%s。

这是一个更好的方法:

class Card(object):

    RANKS = ["0", "Ace", "2", "3", "4", "5", "6", 
             "7", "8", "9", "10", "Jack", "Queen", "King"]
    SUITS = {"c":"Clubs", "d":"Diamonds", "h":"Hearts", "s":"Spades"}

    def __init__(self, rank, suit):
        self.rank = rank
        self.suit = suit

    def getRank(self):  # gets rank of card as text
        if self.rank >= 1 and self.rank <= 13:
            return Card.RANKS[self.rank]
        else:
            return "ERROR"

    def getSuit(self):  # gets suit of card in a full word
        if self.suit in Card.SUITS:
            return Card.SUITS[self.suit]
        else:
            return "ERROR"

    def __str__(self):  # to make the strings to answer the problems
        return "Card is %s of %s" % (self.getRank(), self.getSuit())

card1 = Card(1, "h")
print (card1)
card2 = Card(3, "c")
print (card2)

答案 1 :(得分:0)

def getRank(self):  # gets rank of card
    if self.rank in self.RANKS: #note self.RANKS
        return self.RANKS[self.rank]


def getSuit(self, SUITS=None):  # gets suit of card in a full word
    if self.suit in self.SUITS: #note use of self.SUITS
        return self.SUITS[self.suit]



def __str__(self):  # to make the strings to answer the problems
    #just call the helper methods we defined earlier
    return "Card is %s of %s" % (self.getRank(),self.getSuit())