Проблемы со структурой и логикой в ​​моем коде Python для игры в Блэкджек - PullRequest
0 голосов
/ 10 ноября 2019

Я пишу игру в блэкджек для школьного задания и пытаюсь понять некоторые части структуры / логики.

В настоящее время у меня возникают проблемы с получением случайно сгенерированных карт для раздачи игрока / дилера. Кроме того, у меня возникают проблемы со структурой и я вызываю свои функции в main().

import random
Dealer_Chips = 500
Player_Chips = 500
Pot = 0

deck = {'Two': 2, 'Three' : 3, 'Four' : 4, 'Five' : 5, 'Six' : 6, 'Seven' : 7, 'Eight' : 8, 'Nine' : 9, 'Jack' : 10, 'Queen' :10, 'King' : 10, 'Ace' : 11}

Player_Hand = [random.choice(list(deck)), random.choice(list(deck))] #Creates Player hand
Dealer_Hand = [random.choice(list(deck)), random.choice(list(deck))] #Creats Dealer Hand
Player_Score = 0
Dealer_Score = 0

    enter code here

def Ace():
    if Player_Hand == 'Ace':
        input("You drew an Ace, Please choose whether the Ace is a 1 or 11")



def Hit():
    Player_Hand + random.choice(list(deck))
    print("You chose to Hit, Your hand is", Player_Hand)


def Stay():
    print ("stay")


def Bet():
    input("Please place a bet. Bets can be either 5, 10, 25, 50")
if input == 5:
        Pot + 5
        if input == 10:
            Pot + 10
            if input == 25:
                Pot + 25
                if input == 50:
                    Pot + 50

def Winner():
    print("Congratulations, you win!")
    Player_Chips + Pot

def Main():
    print("Welcome to Blackjack!")
    print("Your Hand is", Player_Hand, "Your Chip Count is", Player_Chips)
    input == Bet()
    input("Would you like to hit or stay? Enter H to hit, or S to stay")
    if input == "H":
        Hit()
    if input == "S":
        Stay()





Main()

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Над этим кодом еще предстоит проделать большую работу, поэтому я сделаю заметки по нескольким вещам, которые мне нравятся.

def Bet():
    input("Please place a bet. Bets can be either 5, 10, 25, 50")
if input == 5:
        Pot + 5
        if input == 10:
            Pot + 10
            if input == 25:
                Pot + 25
                if input == 50:
                    Pot + 50
  1. Не уверен, что это простоошибка копирования + вставки, но отступы на этом все отключены - ваша цепочка if s начинается за пределами определения вашей функции, поэтому они не произойдут как часть функции.
  2. Вашif операторы вложены друг в друга, что означает, что внутренние никогда не произойдут (потому что input не может быть одновременно, скажем, 5 и 10).
  3. Ни одно из них никогда не произойдет, потому что вы input строка и сравниваете с целыми числами.
  4. Вы не смотрите на значение, возвращаемое функцией input, вы сравниваете ее с самой функцией input.

Может выглядеть фиксированная версия этой функциинапример:

def Bet():
    # Get the bet from the user by inputting a string and converting it to an int.
    bet = int(input("Please place a bet. Bets can be either 5, 10, 25, 50: "))
    # Make sure that the bet is within the set of allowed values.
    assert(bet in [5, 10, 25, 50])
    # Add it to the Pot global variable.
    Pot += bet

Теперь, глядя на функцию Main():

def Main():
    print("Welcome to Blackjack!")
    print("Your Hand is", Player_Hand, "Your Chip Count is", Player_Chips)
    input == Bet()  # see notes 1, 2, and 3
    input("Would you like to hit or stay? Enter H to hit, or S to stay") # 4
    if input == "H":
        Hit()  # 5
    if input == "S":
        Stay()
  1. Bet() не возвращает никакого значения, поэтому нет причин назначать что-либоего возвращение.
  2. Назначение чего-либо для функции input сделает эту функцию непригодной для использования.
  3. Оператор равенства == не работает для присвоения чего-либо.
  4. Опять же, вам нужно присвоить значение для возврата input, например, action = input("...")
  5. После того, как вы либо Hit(), либо Stay() ed, вам нужно сделать больше для обновления состоянияигрыЕсли вы Hit() хотите вернуться назад и снова запросить пользователя, а если вы Stay(), то вы хотите сложить оценки.

Я думаю, что вам нужна дополнительная помощь в этом, чемможет дать один ответ на стек, поэтому я бы порекомендовал поговорить с вашим учителем и попросить у него совета, как они ожидают, что вы выполните задание - например, они уже объяснили вам циклы?

Удачи! :)

1 голос
/ 10 ноября 2019

Вот так:)

input("Would you like to hit or stay? Enter H to hit, or S to stay")

input - встроенная функция. Вы путаете ее с переменной. Вам нужно создать переменную с другим именем (я буду использовать Input_Variable для остальной части этого ответа), и вам нужно сохранить результат input() в указанной переменной. Например:

input == Bet()

Input_Variable == x и Input_Variable = x - не одно и то же. Input_Variable == x проверяет , если Input_Variable равно x, а Input_Variable = x делает Input_Variable равным x.

InputVariable = input("Would you like to hit or stay? Enter H to hit, or S to stay")
def Bet():
    InputVariable = input("Please place a bet. Bets can be either 5, 10, 25, 50")
if InputVariable == 5:

В Python вам нужноотступать строки, чтобы сделать их частью утверждения. Ваш отступ тоже должен быть согласованным:

def Bet():
    input("Please place a bet. Bets can be either 5, 10, 25, 50")
    if input == 5: # this needs to be indented by four spaces or one tab
        # more code goes here, indented by eight spaces or two tabs
if input == 5:
    Pot + 5
    if input == 10:
        Pot + 10
        if input == 25:
            Pot + 25
            if input == 50:
                Pot + 50

Pot + 5 не добавляет5 в Pot, затем сохраните результат в Pot: , если вы хотите добавить 5 в Pot и сохранить результат в Pot, вам нужно сделать что-то вроде Pot = Pot + 5.

Также нетуказывают на то, чтобы делать вещи таким образом. Просто сделайте

Pot = Pot + InputValue
Player_Hand = [random.choice(list(deck)), random.choice(list(deck))]

Я не совсем уверен, что вы пытаетесь сделать здесь, но это не так. Пожалуйста, уточните.

Возможно, я пропустил несколько вещей, но, надеюсь, это поможет вам. Удачи в школьном задании!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...