Script que embaralha e distribui cartas

ola pessoal!

criei esse script que embaralha e distribui duas cartas para nove jogadores diferentes e ainda coloca cinco cartas na “mesa”. tanto as cartas da mesa, quanto as cartas dos jogadores, devem ir para um “monte de cartas fora”
Sugestoes de melhorias para o script???

lembrando que eu estou aprendendo python. tenho apenas logica de programacao… criei esse script com apenas o conhecimento que tenho (estruturas condicionais, estruturas de repeticao, listas e operadores logicos/comparacao)
ainda nao aprendi a usar funcoes

from random import randint, shuffle

deck = ['2s', '3s', '4s', '5s', '6s', '7s', '8s', '9s', 'Ts', 'Js', 'Qs', 'Ks', 'As', '2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', 'Th', 'Jh', 'Qh', 'Kh', 'Ah']        # Cartas do baralho
deck_backup = ['2s', '3s', '4s', '5s', '6s', '7s', '8s', '9s', 'Ts', 'Js', 'Qs', 'Ks', 'As', '2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', 'Th', 'Jh', 'Qh', 'Kh', 'Ah'] # backup das cartas do baralho
shuffle(deck)    # embaralhar
out_cards = []   # cartas fora do jogo
player_hand = [] # maos dos players
nop = 9          # numero de players

while True:
    player_hand = []
    out_cards = []
    deck = deck_backup
    shuffle(deck)      # reembaralhar

    for def_hands in range(0, nop):     # def_hands, definir maos
        player_hand += deck[0], deck[1] # distribuir cartas
        out_cards += deck[:2]           # definir cartas fora
        deck = deck[2:]                 # tirar do baralho as cartas fora e as cartas distribuidas

    x = 0
    for show in range(0, nop):          # mostrar as maos dos players
        print(f'Player{show+1}: {player_hand[x]} {player_hand[x+1]}')
        x += 2

    board = [deck[0], deck[1], deck[2], deck[3], deck[4]] # definindo board
    print(f'         Board: {board[0]} {board[1]} {board[2]} {board[3]} {board[4]}')
    out_cards += deck[:5]
    deck = deck[5:]

    entrada = input() # so para nao entrar em loop infinito

@thiagoDM sua lógica está bem avançada, parabéns!
Você pode começar a praticar essa lógica com funcões, acho que o que falta em seu código é uma função.

tipo:
def deck():
return next_card

não sei, só uma ideia.
A dica é, tente usar funções quando o gerenciador de fluxo está faltando mais que uma função.

opa, obrigado, @franklin0036!

eu nao utilizo funcoes ainda… estou esperando (anciosamente) chegar essa aula haha estou quase la… estou aprendendo sobre tuplas, lista e dicionarios

fiz esse post em outro site um cara me deu umas dicas… olha como ficou!

from random import randint, shuffle

suits = 'shcd'          # naipes das cartas
ranks = 'AKQJT98765432' # cartas
deck = []               # deck de cartas
player_hand = []        # guarda as cartas dos players
nop = 9                 # numero de players

while True:
    # Gerando o deck de cartas...
    for suit in suits:               # para cada naipe...
        for rank in ranks:           # sera adiconada uma carta...
            deck.append(rank + suit) # via funcao 'append()'
    shuffle(deck)                    # reembaralhar
    player_hand = []
    out_cards = []

    for def_hands in range(0, nop):  # def_hands, definir maos dos players
        player_hand.append(deck.pop(0)), player_hand.append(deck.pop(0))

    x = 0
    for show in range(0, nop):       # mostrar as maos dos players
        print(f'Player{show+1}: {player_hand[x]} {player_hand[x+1]}')
        x += 2

    board = []
    board.append(deck.pop(0)), board.append(deck.pop(0)), board.append(deck.pop(0)), board.append(deck.pop(0)), board.append(deck.pop(0)) # definindo board
    print(f'{" " * 7}Board: {board[0]} {board[1]} {board[2]} {board[3]} {board[4]}')

    entrada = input() # apenas para nao entrar em loop infinito

Melhorou! O que importa é isso, aprender e praticar.

1 curtida