我分配了一个变量,但它说我没有

2024-04-26 00:54:23 发布

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

注意:我使用的是python3.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

我不知道怎么了。我已经将global放入了tutorial(),并且它没有错误地说randomIp没有在命令global randomIP中仅为print(randomIp + '.' + randomIp + '.' + randomIp + '.' + randomIp)定义。有人知道问题出在哪里吗?如果我想在每个"."之后打印一个不同的随机数。代码是什么?我希望它能打印出23.321.43.23这样的内容。每个句点后的一个完全不同的数字。你知道吗


Tags: 代码文本importgame游戏hellodefrandom
1条回答
网友
1楼 · 发布于 2024-04-26 00:54:23

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

您可以省略global关键字。你知道吗

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

请注意,只有在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地址,跳过127本地主机块、多播块等等。它可以根据网络掩码生成广播地址。你知道吗

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地址做任何事情。你知道吗

相关问题 更多 >