J'essaie de coder une fonction qui prendrait une liste d'entiers (allant de 1 à 13, représentant les cartes de 1 au roi) résultant en un tuple où le 1er élément est le total de notre main, et le 2ème élément est le nombre d'as mous présents.
Notez que la fonction suppose un jeu infini, plutôt qu'un jeu standard de 52
Voici l'invite,
Dans blackjack.py, implémentez une fonction appelée "score":def score(cards):
L'argument de cette fonction est une liste d'entiers représentant les cartes d'une main de Blackjack.
Cette fonction renvoie un tuple. Le premier élément du tuple est la valeur totale de la main selon les règles de score du Blackjack (voir ci-dessus; ce n'est pas simplement la somme des nombres entiers dans la liste des cartes). Le deuxième élément du tuple est le nombre d'as "soft" qui restent dans la main après avoir effectué des conversions de 11 → 1 pour empêcher la main de faire faillite.
Quelques exemples de listes de cartes à gauche et les valeurs de tuple correspondantes à droite :
[ 3, 12 ]
→(13, 0)
[ 5, 5, 10 ]
→(20, 0)
[ 1, 5 ]
→(16, 1)
[ 1, 1, 5 ]
→(17, 1)
Voici mon code, qui produit un tuple de la même liste d'entiers, plutôt qu'un tuple avec (total_value, soft_ace_count)
import sys
import random
def get_card():
''' The function returns a random value between 1 and 13 (where 1 = Ace & 13 = King). Simulating
an infinite deck of cards '''
return random.randint(1, 13)
def score(cards):
''' This function will take a list of numbers and result in a tuple where the 1st element is the
total value of the blackjack hand. The second element is the number of soft aces present (if any)
'''
# First we begin with 0 as our total, since no cards have been dealt out
total = 0
# Code that accounts for the event that NO aces are drawn (i.e. non of them soft)
ace_found = False
soft = False
# Code that accounts for the jacks(11), queens(12), and kings(13) having a value of 10 as per
# blackjack rules
for card in cards:
if card.value >= 10:
total += 10
else:
total += card.value
# Code that accounts for the PRESENCE of aces
if card.value == 1:
ace_found = True
# Code that accounts for the even that Aces are drawn and the conditions are such that the ace('s)
# drawn can be considered "soft" (i.e. the value of the Ace can be considered 1 or 11)
if total < 12 and ace_found:
total += 10
soft = True
return total, soft
Ici, les résultats du code
>>>3, 12
(3, 12)
Solution du problème
Que pensez-vous de cette solution?
def blackjack(hand):
total = 0
soft_aces = 0
for card in hand:
if card == 1:
soft_aces += 1
total += 11
elif card > 10:
total += 10
else:
total += card
while total > 21 and soft_aces > 0:
total -= 10
soft_aces -= 1
return (total, soft_aces)
Aucun commentaire:
Enregistrer un commentaire