Блэкджек Python UnboundLocalError

1

Итак, я работал над бот-блэкджеком с python в качестве приложения командной строки, и я пытаюсь запустить этот код, но я получаю сообщение об ошибке:
"UnboundLocalError: локальная переменная" myshowingcard ", указанная перед назначением"

Вот код, который я пытаюсь запустить (весь код):

import random

 # Defining list of cards
cards = ["Ace of Spades", "Two of Spades", "Three of Spades", "Four of Spades",
"Five of Spades", "Six of Spades", "Seven of Spades", "Eight of Spades",
"Nine of Spades", "Ten of Spades", "Jack of Spades", "Queen of Spades",
"King of Spades", "Ace of Clubs", "Two of Clubs", "Three of Clubs",
"Four of Clubs", "Five of Clubs", "Six of Clubs", "Seven of Clubs",
"Eight of Clubs", "Nine of Clubs", "Ten of Clubs", "Jack of Clubs",
"Queen of Clubs", "King of Clubs", "Ace of Hearts", "Two of Hearts",
"Three of Hearts", "Four of Hearts", "Five of Hearts", "Six of Hearts",
"Seven of Hearts", "Eight of Hearts", "Nine of Hearts", "Ten of Hearts",
"Jack of Hearts", "Queen of Hearts", "King of Hearts", "Ace of Diamonds",
"Two of Diamonds", "Three of Diamonds", "Four of Diamonds", "Five of Diamonds",
"Six of Diamonds", "Seven of Diamonds", "Eight of Diamonds", "Nine of Diamonds",
"Ten of Diamonds", "Jack of Diamonds", "Queen of Diamonds", "King of Diamonds"]

 # Giving both sides different cards
myshowingcard = cards[random.randint(0, 51)]
myhiddencard = cards[random.randint(0, 51)]
theirshowingcard = cards[random.randint(0, 51)]
theirhiddencard = cards[random.randint(0, 51)]
mysum = 0
theirsum = 0

 # Function to check if and cards are the same
def checkCards():
    if myshowingcard == myhiddencard:
        myshowingcard = cards[random.randint(0, 51)]
        myhiddencard = cards[random.randint(0, 51)]
        theirshowingcard = cards[random.randint(0, 51)]
        theirhiddencard = cards[random.randint(0, 51)]
        checkCards()
    if myshowingcard == theirhiddencard:
        myshowingcard = cards[random.randint(0, 51)]
        myhiddencard = cards[random.randint(0, 51)]
        theirshowingcard = cards[random.randint(0, 51)]
        theirhiddencard = cards[random.randint(0, 51)]
        checkCards()
    if myshowingcard == theirshowingcard:
        myshowingcard = cards[random.randint(0, 51)]
        myhiddencard = cards[random.randint(0, 51)]
        theirshowingcard = cards[random.randint(0, 51)]
        theirhiddencard = cards[random.randint(0, 51)]
        checkCards()
    if myhiddencard == theirhiddencard:
        myshowingcard = cards[random.randint(0, 51)]
        myhiddencard = cards[random.randint(0, 51)]
        theirshowingcard = cards[random.randint(0, 51)]
        theirhiddencard = cards[random.randint(0, 51)]
        checkCards()
    if myhiddencard == theirshowingcard:
        myshowingcard = cards[random.randint(0, 51)]
        myhiddencard = cards[random.randint(0, 51)]
        theirshowingcard = cards[random.randint(0, 51)]
        theirhiddencard = cards[random.randint(0, 51)]
        checkCards()
    if theirhiddencard == theirshowingcard:
        myshowingcard = cards[random.randint(0, 51)]
        myhiddencard = cards[random.randint(0, 51)]
        theirshowingcard = cards[random.randint(0, 51)]
        theirhiddencard = cards[random.randint(0, 51)]
        checkCards()


def printCards():
    print("Your cards are {} and {}.".format(myshowingcard, myhiddencard))
    print("Your opponent showing card is {}.".format(theirshowingcard))


checkCards()
printCards()

Первоначально я сделал код, дающий каждой боковой карте функцию, называемую giveCards(), но это не сработало. Пожалуйста, помогите мне, спасибо!

Теги:
text
command-prompt
blackjack

2 ответа

0
Лучший ответ

В начале определения функции checkCards:

def checkCards():
    global myshowingcard, myhiddencard, theirshowingcard, theirhiddencard
    if myshowingcard == myhiddencard:
        myshowingcard = cards[random.randint(0, 51)]
        ... rest of the code

Таким образом, функция использует глобально определенные переменные вместо локальных.

  • 1
    Спасибо! Работает отлично! Я не понимаю, почему мой не работает, хотя я определил переменную вне функций, поэтому я не знаю, почему она должна быть определена глобально?
  • 2
    @TFI, потому что любая переменная, которая назначена в функции, автоматически является локальной переменной
Показать ещё 3 комментария
4

Вы пытаетесь получить доступ к переменной myshowingcard и другим глобальным переменным внутри функции, явно заявляя об этом. Добавление global myshowingcard и т.д. Для других переменных устранит проблему, однако, это сделает ваш код более трудным для чтения в будущем - легко потерять информацию о том, где вещи изменяются и как они фактически доступны.

Вы должны попробовать передать аргументы функции:

 # Function to check if and cards are the same
 def checkCards(myshowingcard, myhiddencard, theirshowingcard, theirhiddencard):

И вызывая функцию следующим образом:

checkCards(myshowingcard, myhiddencard, theirshowingcard, theirhiddencard)

И, возможно, посмотрите, как область видимости работает в python, чтобы понять ошибку.

  • 1
    Спасибо! Это очень помогло!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню