Я пытаюсь создать карточную игру, но у меня проблемы с определениями. В частности, определение, приведенное ниже, должно возвращать перетасованную колоду (пока не подходит) под переменной «колода». Однако я получаю сообщение об ошибке:
NameError: 'name' deck 'не определено.
Я могу избежать этого, не используя определения, однако я хочу иметь как можно больше определений, чтобы облегчить их в долгосрочной перспективе. Заранее спасибо.
import random
playerhand=[]
dealerhand=[]
def shuffle():
numbers = []
faces = ['T', 'J', 'Q', 'K', 'A']
for i in range(8):
numb = str(i + 2)
numbers.append(numb)
values=numbers+faces
deck=4*values
random.shuffle(deck)
return deck
print deck[0]
4 ответа
Два момента:
Вы определяете функцию, но не вызываете ее. Если вы не вызываете функцию, код внутри нее не выполняется.
Переменная с именем
deck
является локальной для функции и исчезает в тот момент, когда функция возвращается.
Вот один из способов решить обе проблемы одновременно:
def shuffle():
...
deck = ...
...
return deck
deck = shuffle()
print deck[0]
Просто чтобы прояснить, здесь есть две переменные, которые обе называются deck
и их не следует путать друг с другом. Чтобы прояснить это различие, в следующем я дал им разные имена:
def shuffle():
...
local_deck = ...
...
return local_deck
global_deck = shuffle()
print global_deck[0]
Два фрагмента кода эквивалентны.
Когда вы return
получаете значение из функции, оно устанавливает значение этой функции на значение, которое вы вернули
т.е. в этом примере foo()
будет равно 4, поэтому будет напечатано 8
def foo()
return 4
print(foo() * 2)
В вашем примере вам нужно изменить последнюю строку на print(shuffle()[0])
, и ваш код будет работать как положено.
Переменная 'deck' определяется локально в вашей функции. Таким образом, вы не можете использовать его вне определения функции. Поскольку ваша функция возвращает колоду, используйте
print shuffle()[0] # this is outside of the function scope
Вместо
deck
находится только в области видимости shuffle
. Чтобы получить доступ к значению, которое возвращает shuffle, вызовите shuffle
, а затем используйте его возвращаемое значение:
import random
playerhand=[]
dealerhand=[]
def shuffle():
numbers = []
faces = ['T', 'J', 'Q', 'K', 'A']
for i in range(8):
numb = str(i + 2)
numbers.append(numb)
values=numbers+faces
deck=4*values
random.shuffle(deck)
return deck
print shuffle()
Я думаю, что вы прогрессируете слишком быстро, если вы сделали эту ошибку, хотя. Узнайте больше о области видимости переменных, вызывающих функциях и операторе return
. Охватывать все это здесь было бы слишком долго.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.