Re: [問題] 宣告變數時,有辦法先不給予名稱嗎?
※ 引述《volleyp (彼德さん)》之銘言:
: 這個問題我自己也感覺有點奇怪..
: 就是我希望產生物件時先不給予變數名,
: 而是在迴圈內根據我設定的條件再來決定這個物件叫什麼。
: 因為我想練習寫一隻撲克牌遊戲,所以我定義了一個類別
: class card:
: def __init__(self, suit, number)
: #花色
: self.suit = suit
: #點數
: self.number = number
: 接下來我需要17張牌(各花色JQKA+一張鬼牌)
: 所以總共宣告了17個card物件
: (JQKA分別用11, 12, 13, 14,花色用0, 1, 2, 3代替)
: SpadeJack = card(0, 11)
: SpadeQueen = card(0, 12)
: .
: .
: HeartKing = card(1, 13)
: .
: .
: ClubAce = card(3, 14)
: (鬼牌另外處理)
: 我想知道除了這樣一個一個宣告外,有沒有辦法做到:
: 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物件來做成我的牌組
: 抱歉因為我剛開始學程式語言,如果有表達不清的地方還請多包涵
: 或是有其他更好的設計方式,還請不吝指教 謝謝!
上一篇有人提出另一種想法,我也是比較偏向那種處理方式 (離題)
如果要堅持原PO的方式,產生自定義的變數,
可以考慮用namedtuple看看。
以下為範例:
import collections
class card:
def __init__(self, suit, number):
self.suit = suit
self.number = number
param = []
dict = {}
for suit in range(4):
for number in range(11, 15):
key = ""
if suit==0:
key += "Spade"
elif suit==1:
key += "Heart"
elif suit==2:
key += "Diamond"
elif suit==3:
key += "Club"
if number==11:
key += "Jack"
elif number==12:
key += "Queen"
elif number==13:
key += "King"
param.append(key)
dict[key] = card(suit, number)
MyCard = collections.namedtuple('MyCard', param)
my_card = MyCard(**dict)
print len(my_card)
print my_card._fields
print my_card.SpadeJack.suit, my_card.SpadeJack.number
print my_card.SpadeQueen.suit, my_card.SpadeQueen.number
print my_card.Heart.suit, my_card.Heart.number
首先把需要的變數名稱 產生出來,
然後順便用一組dict把Card做初始化,
接著用一個namedtuple MyCard,把產生出來的dict值傳進去
基本上應該可以做到原PO想要的方式。
(PS:不確定這是不是一個好的方法就是了 XD)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.34.163.177
推
03/04 19:30, , 1F
03/04 19:30, 1F
→
03/04 19:31, , 2F
03/04 19:31, 2F
→
03/04 19:35, , 3F
03/04 19:35, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章