-1

当我运行此代码时,它会响应 UnboundLocalError: local variable 'hhh' referenced before assignment。但是,尽管以类似的方式定义了全局字符串“temp”,但它不会以此类错误响应。任何帮助都会很棒,谢谢。

    import random, os
def start():
    global level
    global hhh
    global temp
    level=1
    temp='     +-!'
    hhh='[X'
    os.system('CLS')
    actualcrawl()
def actualcrawl():
    print (temp)
    for a in range(2,128):
        hhh=hhh+temp[random.randrange(1,8)]
    hhh=hhh[:79]+'>'+hhh[80:]
    for i in range(1,3):
        a=random.randrange(3,8)
        b=random.randrange(6,15)
        hhh=hhh[:16*a+b-1]+'='+hhh[16*a+b:]
    for i in range(1,9):
        print (hhh[16*i-16:16*i])
4

1 回答 1

0

是的,你应该看看这个问题Using global variables in a function 而不是创建它们的函数

简而言之,如果它只是从一个名称中读取,并且该名称在本地不存在,它将尝试在任何包含范围内查找该名称。这就是发生的事情temp,它将在全局范围内找到。但是hhh,你写,这会让 Python 相信它hhh是一个局部变量。

还有一件事,但更重要的是,不建议使用它global。您可以调用actualcrawl()instart()并传入hhh,temp,这是大多数人的做法。

编辑

很简单:

import random,os
def start():
    level=1
    temp='     +-!'
    hhh='[X'
    os.system('CLS')
    actualcrawl(temp,hhh)

def actualcrawl(temp,hhh):
    print (temp)
    for a in range(2,128):
        hhh=hhh+temp[random.randrange(1,8)]
    hhh=hhh[:79]+'>'+hhh[80:]
    for i in range(1,3):
        a=random.randrange(3,8)
        b=random.randrange(6,15)
        hhh=hhh[:16*a+b-1]+'='+hhh[16*a+b:]
    for i in range(1,9):
        print (hhh[16*i-16:16*i])

我不知道你在 Python 之前使用什么语言,但是你真的不需要像在 C/C++ 中那样声明一个变量。因为当你分配给一个变量时,你只是将名称绑定到一个对象。参见这个python变量是指针?

于 2013-03-28T05:20:03.013 回答