无法执行黑杰克代码Python

时间:2017-03-22 23:07:38

标签: python

嗨,我真的是一个完全初学者的任何帮助或建议非常感谢我正在尝试研究下面的代码但是当我执行代码时我什么都没得到 我尽我所能,但它给了我很多错误。请仔细看看,任何建议非常感谢你

import random

ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
suits = ['Hearts', 'Clubs', 'Spades', 'Diamonds']
class Card:
    def c1(self, rank, suit):
        self.rank = rank
        self.suit = suit
    def value(self):
        if self.rank in ['J', 'Q', 'K']:
            return 10
        elif self.rank == 'A':
            return 1,11
        else:
            return int(self.rank)
    def c2_(self):
        return self.rank + '-' + self.suit
class Deck:
    def d1(self):
       self.cards = []
        for rank in ranks:
            for suit in suits:
               c = Card(rank, suit)
               self.cards.append(c)
    def shuffle(self):
       random.shuffle(self.cards)
   def draw_card(self):
       if not self.cards:
            raise Exception("No more cards: empty deck!")
        card = self.cards.pop()
        return card
    def d2(self):
        cards = []
        for c in self.cards:
            cards.append(str(c))
        return str(cards)
    def test2(self):
       deck = Deck()
       print 
       print deck
       deck.shuffle()
       print 
       print deck

tryss= Deck()
tryss.d1()
tryss.draw_card()
tryss.dshuffle()
tryss.d2()
tryss.test2()

2 个答案:

答案 0 :(得分:1)

正如其他人所说,你有一定数量的缩进错误,你将不得不追逐。

你将遇到的主要问题是你没有用任何东西初始化类。如果您将c1和d1函数更改为__init__,它会将它们初始化为一个类项,然后可以使用self进行访问。

否则,对于test2中的打印件,请不要通过执行print(deck)来打印课程项目,而是使用deck.d2()打印该值,因为这样可以将卡片串联化甲板。

函数d2也有一个错误,因为它应该是str(c.c2_()),因为这是你对卡片名称进行字符串化的功能。

你还有很多东西要从中得到一个二十一点游戏,但至少应该让当前的代码接近功能。如果您对不起作用的内容有清晰的描述,请修改问题以便询问。

答案 1 :(得分:-1)

你的程序有太多问题:

  • 缩进
  • 一些实例变量作为参数传递给同一类中的其他方法。
  • Card中定义了一个名为c1的方法,但是用它来表示该类的构造函数。
  • d1中的Deck方法也是一个构造函数。所以,我从全球通话中删除了它
  • 要打印对象,必须定义其字符串表示形式。看How to create a custom string representation for a class object?

除此之外,你正在进行print而没有争论。在这种情况下,您可以print('')

这是您的代码,带有适当的缩进,以及print语句可以与Python2和Python3一起使用。

import random

ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
suits = ['Hearts', 'Clubs', 'Spades', 'Diamonds']
class Card:
    def __init__(self, rank, suit):
        self.rank = rank
        self.suit = suit
    def value(self):
        if self.rank in ['J', 'Q', 'K']:
            return 10
        elif self.rank == 'A':
            return 1,11
        else:
            return int(self.rank)
    def c2_(self):
        return self.rank + '-' + self.suit
class Deck:
    def __init__(self):
        self.cards = []
        for rank in ranks:
            for suit in suits:
                c = Card(rank, suit)
                self.cards.append(c)
    def shuffle(self):
        random.shuffle(self.cards)
    def draw_card(self):
        if not self.cards:
            raise Exception("No more cards: empty deck!")
        card = self.cards.pop()
        return card
    def d2(self):
        cards = []
        for c in self.cards:
            cards.append(str(c))
        return str(cards)
    def test2(self):
        deck = Deck()
        print('')
        print(deck)
        deck.shuffle()
        print('')
        print(deck)

if __name__ == '__main__':
    tryss= Deck()
    tryss.draw_card()
    tryss.shuffle()
    tryss.d2()
    tryss.test2()