1

注意:我正在使用 Python 3.5 我刚刚开始为我制作的基于文本的游戏创建第二部分,这是我遇到问题的代码:

import random

def game():
    randomIp = random.randint(10, 999)

    def tutorial():
        global randomIp

        print('Hello.')
        print(randomIp + '.' + randomIp + '.' + randomIp + '.' + randomIp)

不断出现的问题是:

File "C:\Users\Anony\Desktop\SICCr4k2BrokeFold\SICCr4k2Broke.py", line 18, in tutorial
  print(randomIp + '.' + randomIp + '.' + randomIp + '.' + randomIp)
NameError: name 'randomIp' is not defined

我不知道怎么了。我已将全局放入tutorial()其中,并且它没有错误地说randomIpis not defined in the command global randomIPonly for print(randomIp + '.' + randomIp + '.' + randomIp + '.' + randomIp). 有谁知道问题是什么?如果我想在每个".". 代码是什么?我想要它,这样它就会打印出类似23.321.43.23. 每个时期之后的数字完全不同。

4

1 回答 1

1

您创建了一个局部变量,但随后您尝试访问同名的全局变量。

您可以简单地省略global关键字。

def game():
    randomIp = ...
    def tutorial():
        print(randomIp + ...)

请注意,这仅在您不指定 randomIpinside时才有效tutorial(),否则您将需要nonlocal声明:

def game():
    randomIp = ...
    def tutorial():
        nonlocal randomIp
        randomIp += 5 # counts as assignment
        print(randomIp + ...)

另请注意,在 python 中使用它.format()而不是+在处理字符串时更典型......

# This works
print('{0}.{0}.{0}.{0}'.format(randomIp))

# This does not work
# print(randomIp + '.' + randomIp + '.' + randomIp + '.' + randomIp)

这是因为您不能在 Python 中将整数添加到字符串中。在其他一些语言中,这将导致自动转换。在 Python 中,它只会导致错误。

生成随机 IP

这将从有效的 /8 块生成一个随机 IP 地址,跳过127localhost 块、多播块等等。它可能会生成广播地址,具体取决于网络掩码。

def randomIp():
    x = random.randint(1, 222)
    if x == 127:
        x += 1
    return '{}.{}.{}.{}'.format(
        x,
        random.randint(0, 255),
        random.randint(0, 255),
        random.randint(0, 255))

当然,您实际上不应该将 IP 地址用于任何事情。

于 2015-11-12T22:12:33.413 回答