day11_Udemy Python 100days

    #Blackjack/21
#Hint 4: Create a deal_card() function that uses the List below to *return* a random card.
#11 is the Ace.
import random
from replit import clear
from art import logo

def deal_card():
    """Retrun a random card from the deck."""
    cards = [11,2,3,4,5,6,7,8,9,10,10,10,10]
    card =random.choice(cards)
    return card

#Hint 6: Create a function called calculate_score() that takes a List of cards as input
#and returns the score.
#Look up the sum() function to help you do this.
def calculate_score(cards):
    """Take a list of cards and return the score calculated from the cards"""

    #Hint 7: Inside calculate_score() check for a blackjack (a hand with only 2 cards: ace + 10)
    # and return 0 instead of the actual score. 0 will represent a blackjack in our game.
    if sum(cards) == 21 and len(cards) == 2:
        return 0
    # Hint 8: Inside calculate_score() check for an 11 (ace). If the score is already over 21, remove the 11
    # and replace it with a 1. You might need to look up append() and remove().
    if 11 in cards and sum(cards) > 21:
        cards.remove(11)
        cards.append(1)

    return sum(cards)

#Hint 13: Create a function called compare() and pass in the user_score and computer_score.
# If the computer and user both have the same score, then it's a draw.
# If the computer has a blackjack (0),then the user loses. If the user has a blackjack (0), then the user wins.
# If the user_score is over 21, then the user loses. If the computer_score is over 21, then the computer loses.
# If none of the above, then the player with the highest score wins.

#In order to call a function,it has to be decalred before the line we want to use it.

def compare(user_score,computer_score):
    if user_score == computer_score:
        return "Draw"
    elif computer_score == 0:
        return "Lose,opponent has Blackjack"
    elif user_score == 0:
        return "Win with a Blackjack"
    elif user_score >21:
        return "You went over.You lose"
    elif computer_score >21:
        return "Opponent went over.You win."
    elif user_score >computer_score:
        return "You win"
    else:
        return "You lose"

def play_game():
    print(logo)

    #Hint 5: Deal the user and computer 2 cards each using deal_card()
    user_cards = []
    computer_cards = []
    is_game_over = False

    for _ in range(2):
        user_cards.append(deal_card())
        computer_cards.append(deal_card())
        """"
        new_card = deal_card()
        user_cards += new_card  (error)
        += is actually shorthand for writing the extend function
        The extend function is something that extends a list ny appending elements from the iterable.
        user_cards.extend(new_card)
        It means that whatever you put inside this parentheses,it has to be a list itself.
        
        ex.new_card = [deal_card()]
           user_cards += new_card or user_cards.extend(new_card)
           
        When you only want to add a single item,not a list,to an existing list then you have to use append.
        
        """

    #Hint 11: The score will need to be rechecked with every new card drawn
    # and the checks in Hint 9 need to be repeated until the game ends.

    while not is_game_over:
        #Hint 9: Call calculate_score(). If the computer or the user has a blackjack (0)
        # or if the user's score is over 21, then the game ends.
        user_score = calculate_score(user_cards)
        computer_score = calculate_score(computer_cards)
        #It's a good idea to regularly test your code so that you don't wait until the end when they're a lot of problems.
        print(f"Your cards:{user_cards},current_score:{user_score}")
        print(f"Computer's first card:{computer_cards[0]}")

        if user_score == 0 or computer_score == 0 or user_score >21:
            is_game_over = True
        else:
            # Hint 10: If the game has not ended, ask the user if they want to draw another card. If yes,
            # then use the deal_card() function to add another card to the user_cards List. If no, then the game has ended.
            user_should_deal = input("Typ 'y' to get another card, type 'n' to pass:")
            if user_should_deal == "y":
                user_cards.append(deal_card())
            else:
                is_game_over = True

    #Hint 12: Once the user is done, it's time to let the computer play.
    # The computer should keep drawing cards as long as it has a score less than 17.

    while computer_score != 0 and computer_score < 17:
        computer_cards.append(deal_card())
        computer_score = calculate_score(computer_cards)

    print(f"Your final hand:{user_cards},final score:{user_score}")
    print(f"Computer final hand:{computer_cards},final score:{computer_score}")
    print(compare(user_score,computer_score))


#Hint 14: Ask the user if they want to restart the game.
# If they answer yes, clear the console and start a new game of blackjack and show the logo from art.py.
while input("Do you want to play a game of Blackjack?Type 'y' or 'n':") == "y":
    clear()
    play_game()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值