“draw1”未定义,高度混乱

2024-10-02 00:41:54 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在做一个抽奖机

import random

def lottoDraw1():
    draw1 = random.randint(1,49)

def lottoDraw2():
    draw2 = random.randint(1,49)
    if draw2 == draw1:
        lottoDraw2()

我得到一个错误,“NameError:name'draw1'未定义”

如果我插入:

draw1 = 0

在代码之前,答案总是0。 即使在我定义要更改draw1之后。在

我做错什么了?在


Tags: 答案代码nameimportifdef错误random
2条回答

您需要将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()

然而,这不是一个好的方法,这是另一个话题。

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çois Fabre指出的,更好的版本是使用集合,它更快,但只允许唯一值:

^{pr2}$

相关问题 更多 >

    热门问题