リスト内包表記でcode数を減らす

ブラックジャックを作ろうとしていますが、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) # 先の表示❹と同じ
 
 
 
 
 
 
 
 
Python小学館
画像表示の基本設定

# canvasとラベルへのpng画像の表示設定# Tak-2-2-list4a.py 10/22/ …

Python小学館
リストから飛び飛びにデータを取得する

リストや辞書からデータを 飛び飛びに取り出したい時に便利な関数# 偶数のみ取り出す filter、l …

Python別館
Python別館 目次

・Pythonで作成したアプリ関連の記事は「Python別館」に、・widgetやその使用方法・それ …