import random
class Card():
def __init__(self, suit, rank, suit_symbol, rank_symbol):
self.rank = rank#ランク番号
self.suit = suit#スート番号
self.rank_symbol = rank_symbol#ランクシンボル
self.suit_symbol = suit_symbol#スートシンボル
self.expression = suit_symbol + rank_symbol#出力する時のカードの見映え・表層・表現
def __str__(self):
return self.expression
class Deck():
def __init__(self):
self.this = []#デッキ自身・デッキそのもの
def discard(self, index=None):#カードを出す
if index is None:
return self.this.pop()
else:
temp = self.this[index]
del self.this[index]
return temp
def draw(self, card):#カードを引く
self.this.append(card);
def __str__(self):
temp = [x.__str__() for x in self.this]
return " ".join(temp)
def shuffle(self):
random.shuffle(self.this)
class Player():
def __init__(self):
self.hand = Deck()
def draw(self, card):
self.hand.draw(card)
def discard(self, index=None):
if index is None:
return sef.hand.discard()
else:
return self.hand.discard(index)
def __str__(self):
return self.hand.__str__()
class CardGenerator():
@staticmethod
def generate():
suit_symbol = ["B","C","D","E"]
rank_symbol = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
deck = Deck()
for suit in range(len(suit_symbol)):
for rank in range(len(rank_symbol)):
deck.draw(Card(suit, rank+1, suit_symbol[suit], rank_symbol[rank]))
return deck
def main():
deck = CardGenerator.generate()
player = Player()
deck.shuffle()
for _ in range(5):
player.draw(deck.discard())
print(player)
main()
aW1wb3J0IHJhbmRvbQoKCmNsYXNzIENhcmQoKToKCWRlZiBfX2luaXRfXyhzZWxmLCBzdWl0LCByYW5rLCBzdWl0X3N5bWJvbCwgcmFua19zeW1ib2wpOgoJCXNlbGYucmFuayA9IHJhbmsj44Op44Oz44Kv55Wq5Y+3CgkJc2VsZi5zdWl0ID0gc3VpdCPjgrnjg7zjg4jnlarlj7cKCQlzZWxmLnJhbmtfc3ltYm9sID0gcmFua19zeW1ib2wj44Op44Oz44Kv44K344Oz44Oc44OrCgkJc2VsZi5zdWl0X3N5bWJvbCA9IHN1aXRfc3ltYm9sI+OCueODvOODiOOCt+ODs+ODnOODqwoJCXNlbGYuZXhwcmVzc2lvbiA9IHN1aXRfc3ltYm9sICsgcmFua19zeW1ib2wj5Ye65Yqb44GZ44KL5pmC44Gu44Kr44O844OJ44Gu6KaL5pig44GI44O76KGo5bGk44O76KGo54++CgkKCWRlZiBfX3N0cl9fKHNlbGYpOgoJCXJldHVybiBzZWxmLmV4cHJlc3Npb24KCgpjbGFzcyBEZWNrKCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJc2VsZi50aGlzID0gW10j44OH44OD44Kt6Ieq6Lqr44O744OH44OD44Kt44Gd44Gu44KC44GuCgkKCWRlZiBkaXNjYXJkKHNlbGYsIGluZGV4PU5vbmUpOiPjgqvjg7zjg4njgpLlh7rjgZkKCQlpZiBpbmRleCBpcyBOb25lOgoJCQlyZXR1cm4gc2VsZi50aGlzLnBvcCgpCgkJZWxzZToKCQkJdGVtcCA9IHNlbGYudGhpc1tpbmRleF0KCQkJZGVsIHNlbGYudGhpc1tpbmRleF0KCQkJcmV0dXJuIHRlbXAKCQoJZGVmIGRyYXcoc2VsZiwgY2FyZCk6I+OCq+ODvOODieOCkuW8leOBjwoJCXNlbGYudGhpcy5hcHBlbmQoY2FyZCk7CgkKCWRlZiBfX3N0cl9fKHNlbGYpOgoJCXRlbXAgPSBbeC5fX3N0cl9fKCkgZm9yIHggaW4gc2VsZi50aGlzXQoJCXJldHVybiAiICIuam9pbih0ZW1wKQoJCglkZWYgc2h1ZmZsZShzZWxmKToKCQlyYW5kb20uc2h1ZmZsZShzZWxmLnRoaXMpCgoKY2xhc3MgUGxheWVyKCk6CglkZWYgX19pbml0X18oc2VsZik6CgkJc2VsZi5oYW5kID0gRGVjaygpCgkKCWRlZiBkcmF3KHNlbGYsIGNhcmQpOgoJCXNlbGYuaGFuZC5kcmF3KGNhcmQpCgkKCWRlZiBkaXNjYXJkKHNlbGYsIGluZGV4PU5vbmUpOgoJCWlmIGluZGV4IGlzIE5vbmU6CgkJCXJldHVybiBzZWYuaGFuZC5kaXNjYXJkKCkKCQllbHNlOgoJCQlyZXR1cm4gc2VsZi5oYW5kLmRpc2NhcmQoaW5kZXgpCgkKCWRlZiBfX3N0cl9fKHNlbGYpOgoJCXJldHVybiBzZWxmLmhhbmQuX19zdHJfXygpCgoKY2xhc3MgQ2FyZEdlbmVyYXRvcigpOgoJQHN0YXRpY21ldGhvZAoJZGVmIGdlbmVyYXRlKCk6CgkJc3VpdF9zeW1ib2wgPSBbIkIiLCJDIiwiRCIsIkUiXQoJCXJhbmtfc3ltYm9sID0gWyJBIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIkoiLCJRIiwiSyJdCgkJCgkJZGVjayA9IERlY2soKQoJCQoJCWZvciBzdWl0IGluIHJhbmdlKGxlbihzdWl0X3N5bWJvbCkpOgoJCQlmb3IgcmFuayBpbiByYW5nZShsZW4ocmFua19zeW1ib2wpKToKCQkJCWRlY2suZHJhdyhDYXJkKHN1aXQsIHJhbmsrMSwgc3VpdF9zeW1ib2xbc3VpdF0sIHJhbmtfc3ltYm9sW3JhbmtdKSkKCQkKCQlyZXR1cm4gZGVjawoKCmRlZiBtYWluKCk6CglkZWNrID0gQ2FyZEdlbmVyYXRvci5nZW5lcmF0ZSgpCglwbGF5ZXIgPSBQbGF5ZXIoKQoJCglkZWNrLnNodWZmbGUoKQoJCglmb3IgXyBpbiByYW5nZSg1KToKCQlwbGF5ZXIuZHJhdyhkZWNrLmRpc2NhcmQoKSkKCQoJcHJpbnQocGxheWVyKQoKCm1haW4oKQo=