所以我正在制作彩票号码机,
import random
def lottoDraw1():
draw1 = random.randint(1,49)
def lottoDraw2():
draw2 = random.randint(1,49)
if draw2 == draw1:
lottoDraw2()
我收到错误,“NameError:名称'draw1'未定义”
如果我插入:
draw1 = 0
在代码之前,答案始终为0。
即使在我定义要更改draw1
之后。
我做错了什么?
答案 0 :(得分:2)
What are Python namespaces all about
这个问题是要求命名空间,这基本上是你遇到的问题。在lottodraw1中,您只更改了draw1的本地版本,因此draw1的全局值保持不变(在您的情况下为0)。因此,您将始终在其他任何地方使用draw1 = None
。
我的方法是制作绘图数组并具有一般绘制功能:
draws = []
def draw():
new_draw = random.randint(1,49)
if new_draw not in draws:
draws.append(new_draw)
else:
draw()
draw()
draw()
print(draws)
现在您可以调用draw,它将添加一个尚未存在的新绘制数字。
如Jean-FrançoisFabre所述,更好的版本是使用集合,它们更快,但只允许唯一值:
draws = set()
def draw():
new_draw = random.randint(1,49)
if new_draw not in draws:
draws.add(new_draw)
else:
draw()
draw()
draw()
print(draws)
答案 1 :(得分:0)
您需要将draw1
作为全局变量
draw1, draw2 = None, None
def lottoDraw1():
global draw1
draw1 = random.randint(1,49)
def lottoDraw2():
global draw1
global draw2
draw2 = random.randint(1,49)
if draw2 == draw1:
lottoDraw2()
然而,这不是一个好主意,这是另一个话题。