Реализация класса `Card` - PullRequest
0 голосов
/ 05 мая 2018

Эта программа предназначена для определения класса Card, который генерирует карту при каждом вызове (только ранг, без масти). Я сделал это не так, как в инструкции, поэтому теперь я совершенно не понимаю, как эта программа должна работать.

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

    def deal(self):
        self.__value(random.randint(1,13))      

    def set_value(self, value):
        self.value = set_face_value

    def get_value():



    def set_face_value(self):
         faces = {1: "Ace", 2: "two", 3: "Three",  4: "Four", 5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine", 10: "Ten", 11: "Jack", 12: "Queen", 13: "King"}
         self.face_value = faces[self.value]

    def __str__(self):
        return self.face_value

Мне пришлось стереть это, потому что я все еще пытаюсь понять, что я сделал не так. Это ее ответ на мою программу:

import random
class Card:
    def __init__(self):
        self.value = 0       # THIS SHOULD BE PRIVATE - PUT __ AS THE FIRST
                             # TWO CHARACTERS IN THE NAME
        self.face_value = '' # YOU DO NOT SAVE THIS
                             # YOU SHOULD HAVE ONLY ONE DATA ATTRIBUTE


    def deal(self):
        self.set_value(random.randint(1,13))
        # THIS METHOD DOES NOT NEED TO CALL "set_value
        # IT SHOULD JUST SET THE self.__value ATTRIBUTE



    def set_value(self, value):
        self.value = value
        self.set_face_value()  # READ THE ASSIGNMENT - YOU DO NOT HAVE A
                               # SET FOR THE FACE VALUE

    # YOU SHOULD NOT HAVE ANY SUCH METHOD IN YOUR CLASS
    def set_face_value(self):
         faces = {1: "Ace", 2: "two", 3: "Three",  4: "Four", 5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine", 10: "Ten", 11: "Jack", 12: "Queen", 13: "King"}
         self.face_value = faces[self.value]

    # YOU SHOULD HAVE A "find_face_value" METHOD THAT RETURNS THE FACE VALUE BASED ON THE VALUE OF THE
    # PRIVATE DATA ATTRIBUTE "__value"

    # THIS IS NOT CORRECT    
    def __str__(self):
        return self.face_value

И это ее критика:

  • Вы определите метод deal в своей карточке класса: этот метод будет сдавать одну карту (используя генератор случайных чисел).
  • Вы определите метод find_face_value, который будет возвращать номинальную стоимость для объекта карты. Вы удалите функцию display_face_value из вашей программы.
  • Ваша функция deal_hand передает список объектов в функцию display_hand и функцию hand stats (отправьте 5 карт из класса Card в функцию)

Итак, моя главная проблема - выполнить deal_hand и показать руку 5, и это будет выглядеть так:

    The 5-card hand is: 
         Jack
         Three
         Queen
         Two
         Seven
    The average value of your hand is:
         7.0
    #Also it should display like this
    print("Your card is", card)

Английский не мой родной язык, поэтому мне трудно понять, чего он действительно хочет.
Это атрибуты данных, которые они запрашивают:

Class name:              Card
 Data attributes:        __value
 Methods:                __init__()
                         deal()
                         set_value()
                         get_value()
                         find_face_value()
                         __str__()

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Похоже, вас просят сделать это очень специфическим способом. Я не верю, что это хороший способ сделать это. Похоже, ваш учитель вызывает поля с __ в начале private, как если бы это было приватное поле java, имейте в виду, что это не так В python, если вы хотите использовать методы получения и установки в стиле Java, вы должны использовать аннотатор @property. Есть много других улучшений, которые я мог бы сделать, я не сделал этого из-за требований, надеюсь, это поможет.

import random


class Card:
    def __init__(self):
        self.__value = 0

    def deal(self):
        self.__value = random.randint(1, 13)

    def set_value(self, value):
        self.__value = value

    def get_value(self):
        return self.__value

    def find_face_value(self):
        faces = {1: "Ace", 2: "two", 3: "Three", 4: "Four",
                 5: "Five", 6: "Six", 7: "Seven", 8: "Eight",
                 9: "Nine", 10: "Ten", 11: "Jack", 12: "Queen",
                 13: "King"}
        return faces[self.__value]

    def __str__(self):
        return self.find_face_value()


def main():
    card = Card()
    total = 0
    print("Your 5 hand card is:")
    for i in range(5):
        card.deal()
        print("Your card is", card)
        total += card.get_value()
    print("The average value of your hand is:")
    print(total/5)


main()
0 голосов
/ 05 мая 2018

Я сделал это по-другому, если я правильно понял, вы должны раздать 5 карт.

from random import *

suits = ["Clubs", "Diamonds", "Hearts", "Spades"]
values = ["Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"]
deck = []
for s in suits:
    for v in values:
        deck.append(v + " of " + s)

shuffle(deck)
hand = deck[:5]
print (hand)

Есть пять карт, которые не повторяются в вашей руке для вывода.

...