ブラックジャックを作ろうとしていますが、codeが複雑で長くなりそうなので、
すこしでも短くなる方法を探っておりますが、以下はその一つ。
joker以外の52枚のカードを呼び込むための準備です。
❶ #1 0~9迄の数値を二乗したリストを普通に作ると、
squares = []
for x in range(10): # 0~9までの数字(10個ではない、10の手前の数字まで)
for x in range(5, 10): # 5~9までならこう書く
squares.append(x**2) # **2は二乗の意味
#上の二つをprintすると;
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81], [25, 36, 49, 64, 81]
❷ # 0~9迄の数値を二乗したリストをリスト内包表記で作る
squares = [x**2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# このように一行で書ける
❸ # トランプカードの一組(deck)を普通に作る
# ♥3は(‘H’, 3)となる
# deck = [(‘S’, 1),[(‘S’, 2),~, [(‘S’, 12), [(‘S’, 13),] これを52組書くのは幼稚すぎるので、まず次の方法で;
❹ suitと番号を取り込む
deck = []
for i in [‘S’, ‘H’, ‘D’, ‘C’]:
for j in range(1, 14):
deck.append((i, j)) # タプルでリストに格納
次のようにprintされます。
[(‘S’, 1), (‘S’, 2), (‘S’, 3), (‘S’, 4), (‘S’, 5), (‘S’, 6), (‘S’, 7), (‘S’, 8), (‘S’, 9), (‘S’, 10), (‘S’, 11), (‘S’, 12), (‘S’, 13), (‘H’, 1), (‘H’, 2), (‘H’, 3), (‘H’, 4), (‘H’, 5), (‘H’, 6), (‘H’, 7), (‘H’, 8), (‘H’, 9), (‘H’, 10), (‘H’, 11), (‘H’, 12), (‘H’, 13), (‘D’, 1), (‘D’, 2), (‘D’, 3), (‘D’, 4), (‘D’, 5), (‘D’, 6), (‘D’, 7), (‘D’, 8), (‘D’, 9), (‘D’, 10), (‘D’, 11), (‘D’, 12), (‘D’, 13), (‘C’, 1), (‘C’, 2), (‘C’, 3), (‘C’, 4), (‘C’, 5), (‘C’, 6), (‘C’, 7), (‘C’, 8), (‘C’, 9), (‘C’, 10), (‘C’, 11), (‘C’, 12), (‘C’, 13)]
# 種類と番号の並びを逆にしたいなら次の方法;
deck = []
for i in range(1,14):
for j in [‘S’,’H’,’D’,’C’]:
deck.append((i,j))
❺ ここでリスト内包表記の登場 上の4行のcodeが1行に収まります。
# [処理 for 変数1 in Object1 for 変数2 in Object2] となります
deck = [(i, j) for i in [‘S’, ‘H’, ‘D’, ‘C’] for j in range(1, 14)]
print(deck) # 先の表示❹と同じ