'draw1'没有定义,高度混淆

时间:2017-05-02 14:34:07

标签: python

所以我正在制作彩票号码机,

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之后。

我做错了什么?

2 个答案:

答案 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()

然而,这不是一个好主意,这是另一个话题。