pythonでブラックジャック作りました！

#初めに
udemyの[オブジェクト指向についての動画](https://www.udemy.com/course/oop-python/)を視聴して、
オブジェクト指向おもしれーと思ったので、腕試し代わりにブラックジャックを作ってみました！

##前提条件
- 山札などの概念はなし。
- Aは常に1として扱う。
- 5カードはなし、両者バーストはディーラーの勝ち。

##コード

```python
import random

CARDS = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
CARDS_DIC = {"A": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7,
             "8": 8, "9": 9, "10": 10, "J": 10, "Q": 10, "K": 10}


class Hit(list): # プレイヤーかディーラーがヒット
    
    def __init__(self, list):
        self.list = list
        
    def player_hit(self):
        self.list.append(random.choice(CARDS))
        print(self.list[-1] + "を引きました")
        show_hand(self.list)
        
    def dealer_hit(self):
        
        while True:
            if sum_cards(self.list) >= 17 and sum_cards(self.list) <= 21:
                return False
            elif sum_cards(self.list) < 17:
                self.list.append(random.choice(CARDS))
            else:
                return False
        
    
class Interface(list): # 分岐
    
     def __init__(self, list):
        self.list = list
    
     def hit_or_stand(self): 
        while True:
            answer = input("hit or stand?:").lower()
            if answer == "hit":
                Hit(self.list).player_hit()
            elif answer == "stand":
                return False
            else:
                print("hitかstandを入力してください")
            if sum_cards(self.list) > 21:
                print("バーストしました")
                return False
            
def classification(player_list, dealer_list): # 勝敗の判定
    
    sum_player = sum_cards(player_list)
    sum_dealer = sum_cards(dealer_list)
    
    if 21 >= sum_player > sum_dealer or sum_dealer > 21 >= sum_player:
        print(f"あなた: {sum_player}")
        print(f"ディーラー: {sum_dealer}")
        print("あなたの勝ちです")
        
    elif 21 >= sum_dealer > sum_player or sum_player > 21 >= sum_dealer or sum_player and sum_dealer > 21:
        print(f"あなた: {sum_player}")
        print(f"ディーラー: {sum_dealer}")
        print("あなたの負けです")
        
    else:
        print(f"あなた: {sum_player}")
        print(f"ディーラー: {sum_dealer}")
        print("引き分けです")
        
def sum_cards(lists): # カードを集計
    
    sum_card = 0
    for list in lists:
        sum_card += CARDS_DIC[list]
        
    return sum_card

def show_hand(list): #手札のカードとカードの合計を表示
    player_hand_info = "と".join(list)
    print( "あなたの手札は" + player_hand_info + "です")
    print("合計" + str(sum_cards(list)) + "です")
    
def main():
    # 1,プレイヤーがカードを引く(2枚)
    player_hand = random.choices(CARDS, k=2)
    player_interface = Interface(player_hand)
    
    # 2,ディーラーがカードを引く(2枚)
    dealer_hand = random.choices(CARDS, k=2)
    dealer_hit = Hit(dealer_hand)
    
    print("ゲームスタート")
    print()
    
    # 3,プレイヤーがヒットかスタンドを選択する(バーストかスタンドするまで)
    print("あなたの番です")
    show_hand(player_hand)
    player_interface.hit_or_stand()
    print()
    
    #4,ディーラーがヒットかスタンドを選択する(合計が17以上になるまで)
    print("ディーラーの番です")
    dealer_hit.dealer_hit()
    print()
    
    # 5,判定して終了
    print("判定")
    classification(player_hand, dealer_hand)# メイン処理層
    
if __name__ == "__main__": 
    main()
```

##処理結果

```
ゲームスタート

あなたの番です
あなたの手札はKと9です
合計19です
hit or stand?:hit
7を引きました
あなたの手札はKと9と7です
合計26です
バーストしました

ディーラーの番です

判定
あなた: 26
ディーラー: 18
あなたの負けです
```

# 反省点
開発の最中にクラスというものが分からなくなり、
結果おかしなコードになってしまったと感じています。(ほかの方が作ったコードと比較すると、私のコードには人物のクラスがなくHitクラスやInterfaceクラスだけがあるといった中途半端な状態となっている)

もう一度オブジェクト指向を勉強し直して再度挑戦したいです。


オブジェクト指向って難しく考えてしまって難しいぞ！