【发布时间】:2017-08-10 20:00:00
【问题描述】:
我是编程新手,我加入这里是为了提问、贡献(当我掌握了更多知识时),并且基本上只是学习并弄清楚编程是否适合我。
我目前正在通过 Udemy 的课程学习 Python,并且我正在开发一个里程碑项目以创建二十一点游戏。唯一的规则是我使用面向对象编程并为卡片和甲板之类的东西创建类。
我看过一些关于 OOP 的教程,但我仍然没有信心实现它们,所以我希望我可以分享我所写的内容,并希望通过这里的交互有更好的理解。
首先,我制定了一个计划,将项目分解为更小的任务,因为这对我来说太难了。这是我的计划:
用 52 张牌创建一副牌
为每张牌分配数值(Ace 可以是 1 或 11)
洗牌
庄家和闲家每人拿到 2 张牌作为开始
询问玩家是想击打还是站立
庄家必须打到17点
比较“点数”,看看谁拥有更多
任何时候,如果有人超过 21 岁,那人就输了
我目前正试图弄清楚第一部分。我基本上是在尝试使用 OOP 和 for 循环创建一个包含所有 52 张卡片的列表,但我似乎无法正确处理。
我在下面分享我用 Python 2 编写的代码。有什么想法可以继续吗?
谢谢, 保罗
编辑 #1:感谢大家的 cmets 和反馈。我想我现在离我越来越近了。有人可以告诉我我这样做是否正确,以及如何打印我用来创建套牌的列表,以便我能够看到列表中的 52 张卡片中的每一张吗?我尝试使用 str 方法,但似乎我做错了。
import random
rank = [2,3,4,5,6,7,8,9,10,'Jack','Queen','King','Ace']
suit = ['Diamonds','Clubs','Hearts','Spade']
class Card(object):
def __init__(self,rank,suit):
self.rank = rank
self.suit = suit
def __str__(self):
return self.suit + self.rank
def grab_suit(self):
return self.suit
def grab_rank(self):
return self.rank
def draw(self):
print (self.suit + self.rank)
class Deck(object):
def __init__(self):
self.cards = []
for i in rank:
for j in suit:
self.cards.append(Card(i,j))
def __str__(self):
return self.cards()
【问题讨论】:
-
python有指针吗?
-
我认为他的意思是建议中的指针......
-
不需要从对象显式派生 Card,改为
class Card()。 new 通过调用 Card 像一个带参数的函数(除了 self)来创建一张卡片,所以将self.deck.append(Card)更改为self.deck.append(Card(i,j)) -
self.deck = self不要那样做……反正没意义,因为你马上就做self.deck = []。 -
@juanpa.arrivillaga 感谢您的更正。 :)
标签: python