作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] 宣告变数时,有办法先不给予名称吗?
时间Mon Mar 4 17:02:23 2013
※ 引述《volleyp (彼德さん)》之铭言:
: class card:
: def __init__(self, suit, number)
: #花色
: self.suit = suit
: #点数
: self.number = number
: for suit in range(4)
: for number in range(11-15)
: 宣告一个没有名称的card物件
: if suit == 0 :
: 物件名称加上Spade
: 物件的suit属性设定为0
: elif suit == 1
: 物件名称加上Heart
: 物件的suit属性设定为1
: .
: .
: if number == 11 :
: 物件名称再加上Jack
: 物件的number设定为11
: .
: .
: 接下来我就可以直接调用这些card物件来做成我的牌组
: 抱歉因为我刚开始学程式语言,如果有表达不清的地方还请多包涵
: 或是有其他更好的设计方式,还请不吝指教 谢谢!
有是有, 不过这不是最好的方式
比较好的做法是把你的所有牌组合成一个 array (其实我个人会用 dict, 不过没差)
结构像这样
deck = [
[...] # 鬼牌
[0, 1, 2, 3 ... 13], # 黑桃
[0, 1, 2, 3 ... 13], # 红心
[0, 1, 2, 3 ... 13], # 方块
[0, 1, 2, 3 ... 13], # 梅花
]
这样你就可以这样取用
deck[1][5] # 黑桃 5
再厉害一点
SPADE = 1
HEART = 2
DIAMOND = 3
CLUB = 4
ACE = 1
JACK = 11
QUEEN = 12
KING = 13
deck[HEART][QUEEN] # 红心 Q
deck[CLUB][3] # 梅花 3
初始化的方法也很简单
deck = []
# append 鬼牌
for suit_id in range(4): # 花色
suit = []
suit.append(None)
for rank_id in range(1, 14):
card = Card(suit_id, rank_id)
suit.append(card)
deck.append(suit)
这样比较容易懂, 也比较容易整理你的牌(的物件)
注意我故意先放鬼牌再放花色, 然後每个花色最前面有一个 None
这是为了要让你 Card 物件里的花色/牌张编号与 list 的 index 一致
--
有兴趣的人可以想想看他本来的方法要怎麽实现XD
--
"问おう、贵方が私のマスターか?"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.47.18
※ 编辑: uranusjr 来自: 220.133.47.18 (03/04 17:05)
1F:推 ck574b027:我今天就在做他那种事,要推坑吗XD 03/04 18:21
2F:推 ck574b027:等等,改变数名称做得到吗?不就等於改dict的key? 03/04 18:26
3F:→ ck574b027:我只能想到新增一个值相同的变数之後删掉原本的。 03/04 18:27
4F:→ uranusjr:不需要改变数名吧, 只要增加就好了不是吗 @@ 03/04 18:29
5F:→ ck574b027:对耶,原本的继续在回圈用,我以为会多一大堆冗变数XD 03/04 18:31
6F:推 kilfu0701:我也比较习惯用u大的方式做 XD 03/04 18:32