Sette e mezzo in Python

In qualche ora di tempo libero ho scritto questo semplice giochino in Python. Dovrebbe rappresentare il gioco del Sette e mezzo ma, anche se le modalità di gioco sono quelle, non sono sicuro che a livello probabilistico sia lo stesso.

Il gioco si svolge contro il computer: prima vengono distribuite le due carte, poi il giocatore può richiederne altre finché non è soddisfatto del suo punteggio.
Successivamente il banco richiede le sue carte finché non si rivelano i punteggi.

Le carte fino a 7 corrispondono a un punteggio del loro valore, le carte 8, 9 e 10 corrispondono a mezzo punto.
Vince il giocatore con il punteggio maggiore, ma se si supera il punteggio di 7 e mezzo si perde, e in caso di punteggio pari vince il banco.

from random import randint
deck = [4 for foo in range(10)]
score = 0.0
dscore = 0.0

def give_card():
    # Return a card and remove it from the deck
    global deck
    while any(deck):
        card = randint(0, 9)
        if deck[card] > 0:
            deck[card] -= 1
            return card

def cscore(hit, score):
    # Calculate the score
    if hit < 7:
        return score + hit + 1
    else:
        # Gold King
        if hit == 10 and randint(0, deck[9]-1) == 0:
            print 'E\' uscita la matta!'
            return 7
        else:
            return score + 0.5

while True:
    print '***************************************'
    # I need first card value because dealer can't see it
    your_card = fcard = give_card()
    score = cscore(your_card, score)
    dealer_card = give_card()
    dscore = cscore(dealer_card, dscore)
    print 'Tua carta: %d (%.1f)' % (your_card+1, score)
    # Card request
    while True:
        # Your turn
        if raw_input('\nAltra carta? [y/n] ') == 'y':
            your_card = give_card()
            print '[Carta] %d' % (your_card+1)
            score = cscore(your_card, score)
            print 'Punteggio: %.1f' % score
            if score > 7.5:
                print '**** Hai sballato! ****'
                break
        # Dealer turn
        else:
            # Dealer ask for a card if his score is lower then your shown score
            # Dealer may think you are bluffing (randint)
            print 'Il banco ha: %d (%.1f)' % (dealer_card+1, dscore)
            while dscore < score - cscore(fcard, 0) or randint(0, 3) == 0\
                  and dscore < 7.5:
                dealer_card = give_card()
                print '[Carta] %d' % (dealer_card+1)
                dscore = cscore(dealer_card, dscore)
                if dscore > 7.5:
                    break
            print 'Punteggio del banco: %.1f' % dscore
            if score > dscore or dscore > 7.5:
                print '\o/ \o/ \o/ Hai vinto! \o/ \o/ \o/'
            else:
                print '**** Hai perso! ****'
            break
    # Game request
    if raw_input('\nGiochi ancora? [y/n] ') == 'y':
        score = 0.0
        dscore = 0.0
        print '\n'
    else:
        break