无法让我的程序生成随机卡(1-13)

时间:2018-05-04 12:40:48

标签: python python-3.x

我正在尝试创建一个具有以下内容的类:

"finalsurcharges": {
    "XXXXX": {
        "name": "over_pkg_1",
        "amount": 54
    },
    "YYYYY": {
        "name": "over_pkg_1",
        "amount": 25
    }
}

这个程序将使用我班级中的“交易”方法并生成一个随机数,而不是将其发送到get_face_value以返回卡片的面部,例如:2 = Ace,10 = 10。 / p>

到目前为止,这是我的计划:

Class name:              Card

 Data attributes:       
   __value
   __face_value

 Methods:
   __init__() – initialize value to 0 and face_value to an empty string
   deal() – generates a random card, assigns the value, calls the set_face_value method
   set_value() – assigns an integer card value to the value attribute
   set_face_value() – sets the face_value based on the what the value attribute is
   get_value() – returns the value of the attribute value
   get_face_value() – returns the value of the attribute face_value
   __str__() – returns the state of the object

所以这个程序的想法是每次执行它时都会生成一张随机卡但是我看不清楚如何把完成产品。我该怎么做才能生成随机卡。每次执行它都是我的错误:

import random
class Card:
    def __init__(self):
        self.__value = 0
        face_value = {}

    def deal(self, get_face_value):
        return random.randit(1,13)  

    def set_value(self):
        return self.__value

    def get_value(self, find_face_value):
        return self.__value

    def find_face_value(self):
        self.__value = {'1': 'Ace', 'A': 'Ace', 'J': 'Jack', '11': 'Jack', 'Q': 'Queen', '12': 'Queen', 'K': 'King', '13': 'King'}

    def __str__(self):
        return self.__value

    def main():
        card = Card()
        card.deal()
        print (card)

1 个答案:

答案 0 :(得分:1)

您的方法def deal(self, get_face_value)def get_value(self, find_face_value)需要一个位置参数(分别为get_face_valuefind_face_value)。但按照这些方法的做法,我认为你不需要它们。

事实上,我不确定你为什么会把它们包含在那里,我怀疑参数和论据的概念对你来说并不清楚。

此外,您的dealset_value方法似乎没有做您可能希望他们做的事情。 "吸气剂"像get_value这样的方法应该返回一些东西,但是" setter"像set_value这样的方法应该设置这些值,而不是返回它们(或者至少不是唯一的)。使用您向我们展示的代码,get_valueset_value执行完全相同的操作,而deal并未将卡的值设置为您生成的随机数,但只是在生成它之后返回该值(并且不执行任何其他操作)。

按照您的伪代码,您想要的可能类似于以下内容:

import random


class Card:
    def __init__(self):
        self.value = 0
        self.face_value = ""  # You mention this should be a string. In your example it's an empty dictionary instead.

    def deal(self):
        self.set_value(random.randint(1, 13)  # You originally typoed "randit".

    def set_value(self, value):
        self.value = value
        # Here we set the value attribute and then call the set_face_value.
        self.set_face_value()

    def set_face_value(self):
        # Here we use the card's own value attribute to determine what face value to give it, using a dictionary lookup.
        faces = {}  # I'll leave compiling the lookup dictionary to you.
        # Just notice that the key has to be an integer of the ones you generated above
        # in the format 1: "Ace", 2: "Two", 3: "Three" etc.
        self.face_value = faces[self.value]

    def __str__(self):
        return self.face_value

def main():
    card = Card()
    card.deal()
    print(card)

当然有很多方法可以让这个代码更好,但我更喜欢保持它简单,有点类似于你,以向你展示它的错误。