Python- 代码不保留定义中赋值的变量
Python- Code not retaining variable assigned in definition
我正在尝试创建一个纸牌游戏,但我在定义方面遇到了问题。特别是,下面的定义应该 return 变量 'deck' 下的洗牌(还没有花色)。但是,我收到错误:
NameError: 'name 'deck' is not defined.
我可以通过不使用定义来避免这种情况,但是,我希望在定义中有尽可能多的内容,以便在较长的 运行 中更容易。提前致谢。
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]
'deck' 变量是在您的函数中本地定义的。所以你不能在函数定义之外使用它。由于你的功能 returns 甲板,使用
print shuffle()[0] # this is outside of the function scope
改为
deck
仅在 shuffle
范围内。要访问随机播放 returns 的值,请调用 shuffle
,然后使用它的 return 值:
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
语句的更多信息。在这里涵盖所有内容太长了。
两点:
您正在定义一个函数但没有调用它。如果你不调用一个函数,它里面的代码就不会被执行。
名为 deck
的变量是函数的局部变量,并在函数 returns 时消失。
这是同时解决这两个问题的一种方法:
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])
,您的代码将按预期运行。
我正在尝试创建一个纸牌游戏,但我在定义方面遇到了问题。特别是,下面的定义应该 return 变量 'deck' 下的洗牌(还没有花色)。但是,我收到错误:
NameError: 'name 'deck' is not defined.
我可以通过不使用定义来避免这种情况,但是,我希望在定义中有尽可能多的内容,以便在较长的 运行 中更容易。提前致谢。
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]
'deck' 变量是在您的函数中本地定义的。所以你不能在函数定义之外使用它。由于你的功能 returns 甲板,使用
print shuffle()[0] # this is outside of the function scope
改为
deck
仅在 shuffle
范围内。要访问随机播放 returns 的值,请调用 shuffle
,然后使用它的 return 值:
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
语句的更多信息。在这里涵盖所有内容太长了。
两点:
您正在定义一个函数但没有调用它。如果你不调用一个函数,它里面的代码就不会被执行。
名为
deck
的变量是函数的局部变量,并在函数 returns 时消失。
这是同时解决这两个问题的一种方法:
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])
,您的代码将按预期运行。