python中的卡片类

python中的卡片类,python,class,random,Python,Class,Random,我第一次在创建一个类,我想我已经做了所有的事情让它运行,但是我仍然遇到了很多问题,就是“list”对象没有属性“shffule”,所以这里的问题是它不会洗牌,也不会告诉剩余的牌,谁能告诉我我做错了什么?提前谢谢 import random class card_deck: def __init__(self, rank, suite, card): self.rank= rank self.suite = suite def rank

我第一次在创建一个类,我想我已经做了所有的事情让它运行,但是我仍然遇到了很多问题,就是
“list”对象没有属性“shffule”
,所以这里的问题是它不会洗牌,也不会告诉剩余的牌,谁能告诉我我做错了什么?提前谢谢

 import random

 class card_deck:
     def __init__(self, rank, suite, card):


        self.rank= rank
         self.suite = suite
    def ranks(self):
         return self.rank
    def suites(self):
         return self.suite
     def cards(self,card):
         suit_name= ['The suit of Spades','The suit of Hearts', 'The suit of Diamonds','Clubs']
         rank_name=['Ace','2','3','4','5','6','7','8','9','10','Jack','Queen','King']


     def value(self):
         if self.rank == 'Ace':
             return 1
         elif self.rank == 'Jack':
             return 11
         elif self.rank == 'Queen':
             return 12
         elif self.rank == 'King':
             return 13
     def shffule(self):
         random.shuffle(self.cards)
     def remove(self,card):
         self.cards.remove(card)


     def cardremaining(self):
        self.suite-self.rank




 def main():
     try:
         deck=[]
         for i in ['Spades','Hearts', ' Diamonds','Clubs']:
         for c in ['Ace','2','3','4','5','6','7','8','9','10','Jack','Queen','King']:
                 deck.append((c, i))
         deck.shffule

         hand = []
         user =eval(input('Enter a number of cards: 1-7 '))
         print()
         while user <1 or user >7:
             print ("Only a number between 1-7:")
             return main()

         for i in range(user):
             hand.append(deck[i]) 
         print (hand)
     except ValueError:
         print("Only numbers")
         main()
随机导入
类别卡片组:
定义初始(自我、等级、套件、卡片):
self.rank=rank
self.suite=suite
def等级(自我):
返回自我等级
def套房(自助):
返回自助套房
def卡(自身、卡):
西服名称=[‘黑桃西服’、‘红桃西服’、‘钻石西服’、‘梅花’]
排名名称=['Ace'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'10'、'Jack'、'Queen'、'King']
def值(自身):
如果self.rank==“Ace”:
返回1
elif self.rank==“杰克”:
返回11
elif self.rank==“女王”:
返回12
elif self.rank==“国王”:
返回13
def shffule(自):
随机。洗牌(自我。牌)
def移除(自身、卡):
self.cards.remove(卡)
def卡剩余(自身):
self.suite-self.rank
def main():
尝试:
甲板=[]
因为我在[‘黑桃’、‘红桃’、‘钻石’、‘梅花’]中:
对于[Ace'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'10'、'Jack'、'Queen'、'King']中的c:
甲板。附加((c,i))
戴克·施弗勒
手=[]
user=eval(输入('输入卡片数量:1-7'))
打印()
而用户7:
打印(“仅1-7之间的数字:”)
返回主管道()
对于范围内的i(用户):
追加(甲板[i])
印刷品(手工)
除值错误外:
打印(“仅数字”)
main()

除了包含许多小错误的代码之外;我会尽力回答你的主要问题

如果要使用
card\u deck
类的
shffule
[sic]方法,则首先需要创建该类的实例(而您尝试使用列表调用该方法)。像这样:

deck = card_deck(some_rank,some_suit,some_card)
deck.shffule() #Now you can call the method
现在,由于您将其设置为类实例,因此无法从中获取类似于
hand.append(deck[i])的项

除非您在类定义中定义了方法
\uuu getitem\uu
,如下所示:

#this will be in your class definition
def __getitem__(self,i):
    return self.card_list[i] #Of course you have to define a list of cards in your class too.

在我看来,您应该花更多的时间来理解类是如何定义的,方法是如何工作的,以及如何访问类的成员。在此之后,除了包含许多小错误的代码之外,您在这里的表现会更好;我会尽力回答你的主要问题

如果要使用
card\u deck
类的
shffule
[sic]方法,则首先需要创建该类的实例(而您尝试使用列表调用该方法)。像这样:

deck = card_deck(some_rank,some_suit,some_card)
deck.shffule() #Now you can call the method
现在,由于您将其设置为类实例,因此无法从中获取类似于
hand.append(deck[i])的项

除非您在类定义中定义了方法
\uuu getitem\uu
,如下所示:

#this will be in your class definition
def __getitem__(self,i):
    return self.card_list[i] #Of course you have to define a list of cards in your class too.

在我看来,您应该花更多的时间来理解类是如何定义的,方法是如何工作的,以及如何访问类的成员。在此之后,您将在这里做得更好

您永远不会真正创建card_deck类的实例。表情

deck=[] 
创建名为deck的变量,该变量引用空列表


在python中,[a,b,c,…]是用于创建列表文本的语法。

您从未实际创建card_deck类的实例。表情

deck=[] 
from collections import namedtuple

Card = namedtuple('Card', 'sign, value')  #  no need to write class to represent card
SIGNS = ['Hearts', 'Diamonds', 'Spades', 'Clubs']


class Deck:
    def __init__(self):
        self.cards = [Card(sign, value) for sign in SIGNS for value in range(2,
                                                                             11) +
                      'J Q K A'.split()]

    def __repr__(self):
        return str([str(card) for card in self.cards])

    def __len__(self):
        return len(self.cards)

    def __getitem__(self, item):
        return self.cards[item]

    def __setitem__(self, key, value):
        self.cards[key] = value


deck = Deck()

print deck[11]  # indexing works, prints Card(sign='Hearts', value='K')

print len(deck)  # prints 52

print deck[13:16]  # slicing works

import random

random.shuffle(deck)  # shuffle works using no extra code
创建名为deck的变量,该变量引用空列表


在python中,[a,b,c,…]是创建列表文字的语法。

shuffle是card\u deck类的一种方法,您试图在列表中使用它。首先将您的列表转换为card_deck。我建议您至少不要在任何地方都输入错误。谢谢,我在主控手的第55行“File”/Users/user/Desktop/deck_class.py”中遇到了另一个问题。append(deck[I])TypeError:“type”对象不可订阅“@sashkello谢谢您的帮助,它现在可以工作了,但是为什么不获取我得到的卡片名称[,0,1,2],因为您需要打印卡片名称,而不是类(例如,在您的类中为其创建一个单独的方法)。当你说要打印一个类的实例时,你的解释器不知道你想打印名字……shuffle是card_deck类的一种方法,你试图在列表中使用它。首先将您的列表转换为card_deck。我建议您至少不要在任何地方都输入错误。谢谢,我在主控手的第55行“File”/Users/user/Desktop/deck_class.py”中遇到了另一个问题。append(deck[I])TypeError:“type”对象不可订阅“@sashkello谢谢您的帮助,它现在可以工作了,但是为什么不获取我得到的卡片名称[,0,1,2],因为您需要打印卡片名称,而不是类(例如,在您的类中为其创建一个单独的方法)。当你说要打印一个类的实例时,你的口译员不知道你想打印名字……谢谢你的帮助,我不知道我是否在问一个愚蠢的问题,但我会同意,当你回答第一个问题时,deck=card\u deck(秩=一些秩,suite=一些西装,card=一些卡片)你说的等级是什么意思。。。。我的意思是,我不明白为什么我要把它们放在那里来利用它,请容忍我,我是如此的新,有时我会感到困惑,这是我的第一语言,我对此感到非常难过,因为我有时觉得我愚蠢到不能成为计算机专业的学生!别担心,没关系。你只需要使用简单的东西来掌握基本的想法。关于
deck=card\u deck(…)
这件事,实际上不需要这样使用它,我只是想明确地展示它。我现在更新了答案。谢谢你的帮助,我不知道我是否在问一个愚蠢的问题
from collections import namedtuple

Card = namedtuple('Card', 'sign, value')  #  no need to write class to represent card
SIGNS = ['Hearts', 'Diamonds', 'Spades', 'Clubs']


class Deck:
    def __init__(self):
        self.cards = [Card(sign, value) for sign in SIGNS for value in range(2,
                                                                             11) +
                      'J Q K A'.split()]

    def __repr__(self):
        return str([str(card) for card in self.cards])

    def __len__(self):
        return len(self.cards)

    def __getitem__(self, item):
        return self.cards[item]

    def __setitem__(self, key, value):
        self.cards[key] = value


deck = Deck()

print deck[11]  # indexing works, prints Card(sign='Hearts', value='K')

print len(deck)  # prints 52

print deck[13:16]  # slicing works

import random

random.shuffle(deck)  # shuffle works using no extra code