リスト内包表記で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別館
Python別館 目次

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

PC・HTML別館
WordPressで半角の記号などが全角に自動変換されるのを回避する方法

皆さん苦労しているようで、下記の方法である程度防げるとの書込みを見つけました。半角の" ; : [] …

Python別館
listboxにスクロールバーを付ける

listboxを使用するのは簡単ですが、選択要素が増えるとスクロールボタンが必要になります。これが結 …