PYTHON - ΜΑΘΗΜΑ 11 - ΣΥΝΑΡΤΗΣΕΙΣ(ΕΙΣΑΓΩΓΗ) - Μέρος 13 από 14 - Game Project: Black Jack

preview_player
Показать описание
ΠΕΡΙΕΧΟΜΕΝΑ ΒΙΝΤΕΟ
3. Game Project: Black Jack
====================================
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
1. Συναρτήσεις
1.1. Παράμετροι
1.2. Επιστρεφόμενες Τιμές
1.3. Καθολικές και Τοπικές Μεταβλητές
1.4. Οργάνωση Προγράμματος
1.5. Κλήση μέσω αναφοράς αντικειμένου
2. Debugging Part 3: PyCharm
3. Game Project: Black Jack
4. Data Project: CRUD - Read
Рекомендации по теме
Комментарии
Автор

Η πιο αφαιρετική άσκηση μέχρι στιγμής.
Αισθάνθηκα λίγο χαμένος, απ'την άποψη οτι δυσκολευόμουν να ακολουθήσω τη συλλογιστική της επίλυσης γραμμικά. Δηλαδή δεν αντιλαμβάνομαι καλά τη σειρά ή την αιτία σειράς των βημάτων. Σα να μην έχει σαφή αρχή, μέση, τέλος, αλλά να ξεκινάμε το puzzle τοποθετώντας κομματάκια πάνω στο τραπέζι που δεν είναι εμφανές γιατί τα βάζουμε εκεί που τα βάζουμε και μόνο όταν αρχίζει και σχηματίζεται μπόλικο μέρος της εικόνας αντιλαμβάνομαι πως όντως ήταν σωστά. Ίσως και να μην ήπια αρκετό καφέ σήμερα και να φταίω εγώ. Θα συνεχίσω να την μελετώ πριν προχωρήσω ωστόσο.

Γι'άλλη μια φορά πάντως να'στε καλά για την υπερπολύτιμη προσφορά γνώσης!
Όταν καταφέρω να αρχίσω να εργάζομαι ως προγραμματιστής θα σας ανταποδώσω τη χάρη!

Theotsi
Автор

Καλησπέρα δάσκαλε, για πολλοστή φορά συγχαρητήρια και σε ευχαριστούμε για όλα! Σχολιάζω σε αυτό το βίντεο για να κάνω μια επισήμανση, ο κώδικας έχει δυο μικρά bug-άκια. Όταν επιλέξεις να συνεχίσεις να παίζεις (Do you want to play again(y-yes, n-no):), σε κάθε επανάληψη βγαίνουν ακριβώς τα ίδια φύλλα και για τον player και για το computer. Επιπλέον, για την περίπτωση που το χαρτί είναι άσος, στο πρόγραμμα είδαμε τις περιπτώσεις να είναι 1 ή 10, αντί για 1 ή 11.

paulpltt
Автор

sthn dikia moy ekdosh ths python den paizei me to seed me apotelesma kathe fora na pairnw ta idia fylla apo to deck me thn pop

texnikoi-pcadmins
Автор

Μετα απο τις ολιγοημερες διακοπες επιστρεψαμε στα βιντεο σας κυριε Ψουνη.
Το ξερω πως η λυση μου επιδεχεται εκλεπτυνσεις αλλα για χαρη χρονου, και γιατι βλεπω ολα τα βιντεο σας απο την σειρα ΠΛΗ αρκεστηκα σε αυτη τη λυση.
Αυτο που εκανα εγω οσον αφορα την αρχικοποιηση της τραπουλας ηταν να φτιαξω μια συναρτηση που στην ουσια μας επιστρεφει την τραπουλα απο την αρχη στην αρχη καθε νεου γυρου!
Βεβαια δεν ξερω αν αντιβαινει στην λογικη της ασκησης γιατι επρεπε να ειναι καθολικη μεταβλητη, αλλα ετσι το εκανα!

from random import randrange

#Global variable
deck = set()
suits = {'Hearts', 'Diamonds', 'Spades', 'Clubs'}
numbers = {'Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King'}

for suit in suits:
for num in numbers:
card_tuple = (suit, num)
deck.add(card_tuple)
print('')
deck = list(deck)


#Functions
def hand_value(deck):
player1 = set()
for i in range(2):

sum_player = 0
for kind, number in player1:
if number == 'Jack' or number == 'King' or number == 'Queen':
sum_player += 10
elif number == 'Ace':
print(f'Your sum is {sum_player}, give the value of the Ace!')
choice = (int(input('What value do you want the Ace to be?: ')))
while True:
if choice != 1 and choice !=11:
print('Please you have to put the right value!')
choice =int(input('What value do you want the Ace to be?: '))
else:
sum_player += choice
break
else:
sum_player += number
if sum_player == 21:
return sum_player, player1
while sum_player < 21:
print(f'Your sum is {sum_player} and your cards are {player1}!')
choice = input('Do you want another card??')
while choice != 'Yes'.lower() and choice != 'No'.lower():
print('Please you have to give the correct answer!')
choice = input('Do you want another card?: ')
if choice == 'No'.lower():
return sum_player, player1
else:
new_card =
player1.add(new_card)
kind, number = new_card
if number == 'Jack' or number == 'King' or number == 'Queen':
sum_player += 10
elif number == 'Ace':
print(f'Your sum is {sum_player}, your hand is {player1}')
choice = (int(input('What value do you want the Ace to be?: ')))
while True:
if choice != 1 and choice !=11:
print('Please you have to put the right value!')
choice =int(input('What value do you want the Ace to be?: '))
else:
sum_player += choice
break
else:
sum_player += number
if sum_player == 21:
return sum_player, player1

return sum_player, player1


def make_deck():
deck = set()
suits = {'Hearts', 'Diamonds', 'Spades', 'Clubs'}
numbers = {'Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King'}

for suit in suits:
for num in numbers:
card_tuple = (suit, num)
deck.add(card_tuple)
print('')
deck = list(deck)
return deck


def main():
player_win = 0
computer_win = 0
number_round = 0
play_on = True
while play_on:
print('Welcome to the game of blackjack!')
print('\n')
res = input('Do you want to play??')
while res !='Yes'.lower() and res != 'No'.lower():
print('You have to give the correct answer!')
res = input('Give the correct answer please!')
if res == 'Yes'.lower():
number_round += 1
blackjack = True
deck = make_deck()
while blackjack:
print(f'We are at round {number_round}, good luck!')
player_sum, player_hand = hand_value(deck)
print(player_sum)
print(player_hand)
if player_sum == 21:
print('Player wins!')
player_win += 1
break
elif player_sum > 21:
print('Computer wins')
computer_win += 1
break
else:
print(f'The player sum is {player_sum}, computer, it is your turn!')
computer_sum, computer_hand = hand_value(deck)
if computer_sum ==21:
print('Computer wins')
computer_win += 1
break
elif computer_sum > 21:
print('Plyaer wins')
player_win += 1
break
else:
if computer_sum >= player_sum:
print('Computer Wins')
computer_win +=1
break
elif player_sum > computer_sum:
print('Player Wins')
player_win += 1
break
else:
pass


else:
if player_win > computer_win:
print(f'Player wins the game, round played are {number_round}!')
elif player_win < computer_win:
print(f'Computer wins the game, rounds played are {number_round}!')
else:
print(f'We have a draw at {number_round} rounds!')
print('Hope to see you again soon!')
play_on = False

main()

konstantinostzaferis
Автор

Καλημέρα! Αρχικά να σας ευχαριστήσω για την προσπάθεια σας και την γνώση που χαρίζετε. Δεύτερον να πω ότι είστε πολύ μεταδοτικός, ειδικά για εμένα που ήμουν άσχετος εντελώς, αν και καποιες φορές λογικά, ειδικά στον κώδικα δεν σας προλαβαίνω, αλλά πάλι ευτυχώς υπάρχει και το STOP & REPLAY.
Κάποιες φορές βέβαια ενώ σε εσάς τρέχει σε εμένα όχι αλλά το παλεύω. Γενικά δεν μπορώ να καταλάβω, ακόμη ελπίζω, ποιο μπαίνει που αλλά ελπίζω να το βρω στο τέλος. Γιατί το πάλεψα πολύ πριν δω την δική σας λύση, σε κάποια έφτασα κοντά αλλά σε κάποια άλλα ....Πάντως έτσι και έτσι είμαι σε πολύ καλύτερο επίπεδο από πριν και περιμένω πως και πως να τελειώσω την σειρά για να την ξαναδώ και να διορθώσω τα λάθη μου και να γεμίσω τα κενά μου. Ευχαριστώ και πάλι.
Τέλος να πω ότι στο παιχνίδι αυτό σας διέφυγε να αυξήσετε τον μετρητή rounds

theodorospostantsidis
Автор

Μετα απο πολυ προσπαθεια, πολλα νευρα και πατεντες που σκεφτηκα βγηκε αυτο

kind = {"heart", "diamond", "spade", "club"}
number = {"ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "jack", "queen", "king"}

deck = {(k, n) for k in kind for n in number}


def hand_value(hand):
card_num_sum = 0
for element in hand:
if "ace" in element:
pass
elif element[1] == "jack" or element[1] == "queen" or element[1] == "king" :
card_num_sum += 10
else:
card_num_sum+= element[1]
return card_num_sum

def player():
kind = {"heart", "diamond", "spade", "club"}
number = {"ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "jack", "queen", "king"}

r_deck = {(k, n) for k in kind for n in number}
for element in r_deck:
if element not in deck:
deck.add(element)
chosen = False
hand = set()
starting_aces= 0
aces_sum = 0
tries = 0
for i in range(2):
card = deck.pop()
hand.add(card)
for element in hand:
if element[1] == "ace":
starting_aces += 1
print(f"This is your hand:{hand}")
while True:
aces=0
for element in hand:
if element[1]=="ace":
chosen = True
aces+=1
if tries==0:
for i in range(aces):
while True:
choice = int(input(f"you have {aces} aces do you want one of the aces to be, 1 or 11:"))
if choice == 1:
aces_sum+=1
break
if choice== 11:
aces_sum+=11
break
if (tries>=1) and aces-starting_aces>0:
starting_aces+=1
while True:
choice = int(input(f"you have one more ace do you want it to be, 1 or 11:"))
if choice == 1:
aces_sum+=1
break
if choice== 11:
aces_sum+=11
break

if
return "You lost!"
more_cards = input("do you want another card, if so type yes, else type any other thing:")
more_cards = more_cards.strip()
more_cards = more_cards.lower()
if more_cards== "yes":
card = deck.pop()
hand.add(card)
print(f"This is your hand:{hand}")
tries+=1
else:
break
print(f"this is your final hand:{hand}")
if chosen== True:
return hand_value(hand)+aces_sum
else:
return hand_value(hand)

def
computer_hand = set()
starting_aces=0
tries=0
aces_sum = 0
chosen = False
for i in range(2):
card = deck.pop()
computer_hand.add(card)
for element in computer_hand:
if element[1] == "ace":
starting_aces += 1
if starting_aces==1:
if
aces_sum+=11
elif
aces_sum+=1
if starting_aces==2:
for i in range(2):
if <= 10:
aces_sum += 11
elif > 10:
aces_sum += 1
while True:
aces= 0
for element in computer_hand:
if element[1]=="ace":
chosen = True
aces+=1
while
card = deck.pop()
computer_hand.add(card)
if aces-starting_aces>0:
starting_aces+=1
if <= 10:
aces_sum += 11
elif hand_value(computer_hand) > 10:
aces_sum += 1
if hand_value(computer_hand) + aces_sum >= 21:
break
if hand_value(computer_hand) + aces_sum >= player_card_sum:
break
if
break
if
break
print(f"this is computer`s final hand:{computer_hand}")
for card in computer_hand:
deck.add(card)
if chosen==True:
return
elif chosen==False:
return hand_value(computer_hand)




def main():
round = 1
computer_score = 0
player_score = 0
while True:
print(f"round {round}")
player_card_sum = player()
if player_card_sum == "You lost!":
computer_score+=1
if player_card_sum!="You lost!":
computer_card_sum =
if
player_score+=1
elif player_card_sum==21:
player_score+=1
elif computer_card_sum>21:
player_score+=1
elif
computer_score+=1
print(f"The score is player:{player_score} computer:{computer_score}")
rematch = input("Do you want a rematch, if so type yes, else type any other thing:")
rematch = rematch.strip()
rematch = rematch.lower()
if rematch=="yes":
round+=1
if rematch!="yes":
break


main()

bvilas
Автор

Μπορείτε να μας πείτε πού μπορούμε να βρούμε παρόμοιες ασκήσεις όπου υλοποιούμαι μικρά παιχνίδια ή κάποιο άλλο πρόγραμμα; Επίσης, τις δικές σας εκφωνήσεις των ασκήσεων που τις ανεβάζετε;

xhulioxhelilai
Автор

def hand_value(hand):
s: int = 0
ace = False
count_ace = 0
for card in hand:
n = card[1]
if n == "queen" or n == "king" or n == "jack":
s += 10
elif n == "ace":
ace = True
count_ace += 1
else:
s += n
if ace:
if count_ace == 1:
if s + 11 > 21:
s += 1
else:
s += 11
else:
if s + 11 >= 21:
s += 1
else:
s += 11
count_ace -= 1
for i in range(1, count_ace + 1):
s += 1

return s


μια μικρή τροποποίηση στην hand_value.Αν ο παίκτης ή ο υπολογιστής έχει στο χέρι του παραπάνω από εναν άσσο τοτε το παρακάτω προγραμμα θα του εμφανίζει ενα λίγο καλύτερο ενδεχόμενο επιλογών

johnniewalkerjohnniewalker
Автор

Καλησπέρα κύριε Ψούνη. Είπα να προσθέσω και έλεγχο για πληκτρολόγηση σωστά του ναι ή όχι όπως φαίνεται στο τέλος .Αυτό που μου συμβαίνει συχνά είναι να μην αναγνωρίζει το brake και να μου το βγάζει υπογραμμισμένο γιατί να συμβαίνει αυτό;
Αυτό το το while εμπεριέχεται στο while true της main μετά το rounds και score.
while True:
choice = input("Do you want to play again; Type 'yes' or 'no': ").strip()
if not choice.isalpha():
print("Error.Characters please..")
else:
low_choice = choice.lower()
if low_choice == "yes":
brake
if low_choice == "no":
return "GAME TERMINATED"

tolissr
Автор

Στο τελευταίο αρχείο που έχει ανέβει για την άσκηση αυτή, κρατάει τις ίδιες κάρτες σταθερά σε όλους τους γύρους. το deck στην σειρά 79 πρέπει να σβηστεί μόνο?

thomasp.
Автор

Καλησπέρα κ. Ψούνη, θα μπορούσαμε σε κάθε input() να βάλουμε τις μεθόδους .lower() ή .upper() οπότε δεν θα είχαμε πρόβλημα αν ο χρήστης πληκτρολογεί με μικρά ή κεφαλαία. Επίσης, δεν αλλάζουμε το rounds, παραμένει πάντα 1. Τέλος, δεν αρχικοποιούμε το deck

asteriosalexiou
Автор

Σήμερα έμαθα ότι η ελληνική 21 είναι το Black Jack! Τι άλλο θα μου μάθει αυτή η πληροφορική; :)

axelkick
Автор

έγραψα αυτό οπού υπολογίζει το hand value και μετατρέπει τον Άσο ανάλογα την περίπτωση ! άλλα νομίζω ότι είναι αρκετά περίπλοκο ισχύει
def hand_value(player):
score = []
while len(player) != len(score):
for p in player:
if p[1] in ["jack", "queen", "king"]:
score.append(10)
elif p[1] == "ace":
score.append(11)
else:
score.append(p[1])
while sum(score) > 21:
if not 11 in score and sum(score) > 21:
return sum(score)
elif 11 in score and sum(score) > 21:
score[score.index(11)] = 1
continue
else:
return sum(score)
else:
return sum(score)

drososdros
Автор

ωραια ασκηση, πολλοι τροποι να υλοποιηθει. Σε καθε πιο περιπλοκη ασκηση ειναι πολυ ενδιαφερον το ποσο διαφορετικες ειναι οι συλλογιστικες πορειες του καθενος.

RockNRollerGR
Автор

Εγώ το σκέφτηκα κάπως έτσι δείτε το και εσείς αν θέλετε και πείτε μου

from random import randrange

def player_sum():
sum = 0
s = 0
for i in range(len(player)):
if player[i][1] == "ace":
while True:
ask = input('choose ace value 1 or 11: ').strip()
if ask == '1':
player[i][1] = 1
break
elif ask == '11':
player[i][1] = 11
break
else:
print('invalid input')
continue
if player[i][1] == "jack" or player[i][1] == "queen" or player[i][1] == "king":
player[i][1] = 10
sum = sum + player[i][1]
return sum


def player_start():
for i in range(2):
x =
player.append(x)
x = tuple(x)
player_hand.append(x)
print(player_hand)
print(f'sum: {player_sum()}')


def player_choose():
global player_skor, skor_mom
while True:
ask = input('want to choose another card? choose yes or no: ')
if ask == 'yes':
x =
player.append(x)
x = tuple(x)
player_hand.append(x)
print(player_hand)
print(f'sum: {player_sum()}')
if player_sum() == 21:
player_skor += 1
print(f'player win!!! mom skor: {player_skor}, mom skor: {skor_mom}')
return
if player_sum() > 21:
skor_mom += 1
print(f'player lost, mom skor: {player_skor}, mom skor: {skor_mom}')
return
continue
elif ask == 'no':
return
else:
print('invalid input')
continue

def mom_sum():
sum = 0
for i in range(len(mom)):
if mom[i][1] == "ace":
if sum + 11 > 21:
mom[i][1] = 1
elif sum + 11 <= 21:
mom[i][1] = 11
if mom[i][1] == "jack" or mom[i][1] == "queen" or mom[i][1] == "king":
mom[i][1] = 10
sum = sum + mom[i][1]
return sum

def mom_choose():
while True:
global player_skor, skor_mom
x =
mom.append(x)
x = tuple(x)
mom_hand.append(x)
if mom_sum() < player_sum():
continue
elif (mom_sum() > player_sum() and mom_sum() < 21) or mom_sum() == player_sum() or mom_sum() == 21:
print(mom_hand)
print(f'mom sum: {mom_sum()}')
skor_mom +=1
print(f'mom win!! mom skor: {skor_mom}, player skor: {player_skor}')
return
elif mom_sum() > 21:
player_skor += 1
print(mom_hand)
print(f'mom sum: {mom_sum()} skor: {skor_mom}')
print(f'player win!!! skor: {player_skor}')
return

def ask():
while True:
ask = input('want to play another game? choose yes or no: ')
if ask == 'yes':
return True
elif ask == 'no':
return False
else:
print('invalid input')
continue

def trapoula():
deck.clear()
kind = {"heart", "diamond", "spade", "club"}
number = {"ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "jack", "queen", "king"}
dick_deck = {(k, n) for k in kind for n in number}
for i in dick_deck:
deck.append(list(i))
player.clear()
mom.clear()
player_hand.clear()
mom_hand.clear()



kind = {"heart", "diamond", "spade", "club"}
number = {"ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "jack", "queen", "king"}
dick_deck = {(k, n) for k in kind for n in number}
deck=[]
for i in dick_deck:
deck.append(list(i))
player = []
player_hand = []
mom = []
mom_hand = []
player_skor=0
skor_mom=0
rounds = 0


def main():
while True:
global player_skor, skor_mom, rounds
rounds += 1
print(f'Round {rounds}')
player_start()
if player_sum() == 21:
player_skor += 1
print(f'player win!!! skor: {player_skor}')
if ask():
trapoula()
continue
else:
return
player_choose()
if player_sum() >= 21:
if ask():
trapoula()
continue
else:
return
mom_choose()
trapoula()
if ask():
continue
else:
return

main()

ant
Автор

Βγάζει "σφάλμα" ο δανειζόμενος κώδικας από το github:
DeprecationWarning: Seeding based on hashing is deprecated since Python 3.9 and will be removed in a subsequent version. The only supported seed types are: None, int, float, str, bytes, and bytearray. seed(datetime.now()) # once, before randint call

Μετά από ώρες (σαν αρχάριος) το εξαφάνισα, παραθέτω το πόνημα με κάποιες μικρο-αλλαγές (θα χαρώ να το τρέξετε):


# globals

kind = {"heart", "diamond", "spade", "club"}
number = {"ace", 2, 3, 4, 5, 6, 7, 8, 9, 10, "jack", "queen", "king"}

deck = {(k, n) for k in kind for n in number}

# functions
def des(stri):
print("=" * 15)
print(stri)
print("=" * 15)

def hand_value(hand):
s = 0
ace = False
for card in hand:
n = card[1]
if n == "jack" or n == "queen" or n == "king":
s += 10
elif n == "ace":
ace = True
s += 1
else:
s += n
if ace:
if s + 10 <= 21:
s += 10
return s


def player(hand):
hand.add(deck.pop())
hand.add(deck.pop())
while True:
print(hand)
choice = input("\nh-Hit or s-Stand: ")
if choice == "h":
hand.add(deck.pop())
value = hand_value(hand)
if value >= 21:
return value
elif choice == "s":
return hand_value(hand)


def computer(value_player, hand):
hand.add(deck.pop())
hand.add(deck.pop())
while True:
value = hand_value(hand)
if value >= 21:
return value
elif value >= value_player:
return value
else:
hand.add(deck.pop())


# main
def main():
rounds = 1
score = [0, 0]
des("BlAcK jAcK")
print("start game...")
while True:
des("Round " + str(rounds))

player_hand = set()
player_value = player(player_hand)

print(f"{player_hand} \nYour value is: {player_value}\n")
if player_value == 21:
des("You won! \nROUNDS: " + str(rounds))
result = "player"
elif player_value > 21:
des("You lost!")
result = "computer"
else:
des("Computer plays")
computer_hand = set()
computer_value = computer(player_value, computer_hand)
print(f"{computer_hand} \nComputer's value is: {computer_value}")
if computer_value > 21:
des("You won! \nROUNDS: " + str(rounds))
result = "player"
else:
des("You lose!")
result = "computer"
if result == "player":
score[0] += 1
else:
score[1] += 1
print(f"Score: Player: {score[0]} - Computer: {score[1]}")
choice = input("\nDo you want to play again(y-yes, n-no):")
if choice == "n":
des("B y e - b y e")
if score[0] > score[1]:
des("WINNER !! :D")
else:
des("LOOSER !! :'(")
break
rounds += 1

main()

dekatotrito
Автор

Μία πρόταση από εμένα προσθέτοντας κάποιες ακόμα λεπτομέρειες στον κώδικα.

from random import randint
import random

def deck_creator():
kind={"hearts", "diamonds", "clubs", "spades"}
number={"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}
deck={(k, l) for k in kind for l in number}
deck=list(deck)
return deck


def deck_generator(x):
deck=deck_creator()
deck_52=deck.copy()
for i in range (x-1):
deck.extend(deck_52)
return deck

def deck_shuffle(deck):
random.shuffle(deck)
return deck

def player_cards_selection(deck, player_cards):
if len(player_cards)==0:
for i in range (2):
card=deck.pop(randint(0, len(deck)-1))
player_cards.append(card)
return deck, player_cards
else:
card=deck.pop(randint(0, len(deck)-1))
player_cards.append(card)
return deck, player_cards

def card_score_check(player_cards, score):

if len(player_cards)==2:
for i in range (len(player_cards)):
if player_cards[i][1]=="A":
temp_score=int(input("Do you want to count your ace as 1 or as 11?"))
while True:
if (temp_score==int(1) or temp_score==int(11)):
score+=int(temp_score)
break
else:
print("Sorry that's not a valid input")
temp_score = input("Do you want to count your ace as 1 or as 11?")
elif player_cards[i][1]=="J" or player_cards[i][1]=="Q" or player_cards[i][1]=="K":
score+=10
else:

else:
if == "A":
temp_score = int(input("Do you want to count your ace as 1 or as 11?"))
while True:
if (temp_score == int(1) or temp_score == int(11)):
score += int(temp_score)
break
else:
print("Sorry that's not a valid input")
temp_score = input("Do you want to count your ace as 1 or as 11?")
elif == "J" or == "Q" or == "K":
score += 10
else:
score +=
return score


def main():
print ("=".center(40, "="))
print ("Let's play BlackJack!".center(40, " "))
print ("=".center(40, "="))
print (" ")
while True:
num_decks=input("How many decks would you like to include?").strip()
if int(num_decks)<1 or num_decks.isalpha():
print("Please enter a number greater than or equal to 1.")
else:

print (f"You have selected {num_decks} decks.")
break
print ("Lets shuffle the cards!")
deck=deck_shuffle(deck)
player_cards=[]
dealer_cards=[]
rounds=0
master_score = [0, 0]
while True:
player_cards.clear()
dealer_cards.clear()
rounds+=1
print ("=".center(30, "="))
print(f"Round {rounds} starts\n\nLets take our cards:".center(50, " "))
player_score=0
dealer_score=0
deck, player_cards=player_cards_selection(deck, player_cards)
deck, dealer_cards=player_cards_selection(deck, dealer_cards)
print (f"Cards remaining: {len(deck)}")
print(f"Your cards are: {player_cards}\nDealer cards are: {dealer_cards[0]} +___Hidden___+ ")
while True:
player_score=card_score_check(player_cards, player_score)
if player_score>21:
print ("You lost the game because you are over 21")
print (f"Your score is {player_score}")
master_score[1]+=1
break
elif player_score==21:
print ("BlackJack! You win!")
master_score[0] += 1
break
else:
choice=input(f"Would you like to draw another card? as your score is: {player_score} y/n")
if choice=="y":
deck, player_cards = player_cards_selection(deck, player_cards)
print (f"Your new hand is: {player_cards}")
else:
print(f"Your final hand is: {player_cards}")
break
print (f"Dealer cards: {dealer_cards}")
while player_score<21 and dealer_score<21:
dealer_score=card_score_check(dealer_cards, dealer_score)
if dealer_score>21:
print (f"Dealer has: {dealer_score} so its over 21. You win!")
print (f"Dealers hand: {dealer_cards}")
master_score[0] += 1
break
elif dealer_score==21:
print ("Dealer has BlackJack! You lost!")
print(f"Dealers hand {dealer_cards}")
master_score[1] += 1
break
elif dealer_score==player_score:
print ("Its draw as both players have:", dealer_score, "score")
print(f"Dealers hand {dealer_cards}")
break
elif dealer_score>player_score:
print (f"Dealer has: {dealer_score} and you have {player_score} score! So you lose")
master_score[1] += 1
break
else:
deck, dealer_cards = player_cards_selection(deck, dealer_cards)
print(f"Dealers hand {dealer_cards}")
play_again=input(f"The score is {master_score}\nWould you like to play again? (y/n)")
if play_again=="n" or len(deck)<10:
if len(deck)<10:
print ("The game will be terminated because there are very few cards left.\nIf you want to play again restart the game.\nFeel free to choose more decks at the beggining of the game to play more rounds.")
print (f"Thank you for playing! Final score: {master_score}")
break

main()

nikos_krvs
welcome to shbcf.ru