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

标签 python windows variable-assignment python-3.5 unassigned-variable

注意:我使用的是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() 中,并且没有错误提示 randomIp 未在命令 global randomIP 中定义仅适用于 print(randomIp + '.' + randomIp + '.' + randomIp + '.' + randomIp)。有谁知道问题是什么?如果我想在每个 "." 之后打印不同的随机数。代码是什么?我希望它能打印出类似 23.321.43.23 的内容。每个时期后的数字完全不同。

最佳答案

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

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

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

请注意,只有当您不在 tutorial()分配 randomIp 时,这才有效,否则您将需要 非本地声明:

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 block 生成随机 IP 地址,跳过 127 本地主机 block 、多播 block 等。它可能会生成广播地址,具体取决于网络掩码。

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 地址用于任何用途。

关于python - 我分配了一个变量,但它说我没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682405/

相关文章:

c - 从 void* 中获取 float

Python/Pandas 用于求解分组均值、中位数、众数和标准差

python - Python中的MAC地址生成器

c# - 犀牛模拟 : stubbing value used in assertion?

windows - 在 Windows 登录窗口之前启动批处理脚本

windows - 帮助我了解 Process Explorer 中的这些内存统计信息

r - 为 `<<-` 定义时 `x < y <- z` 的歧义

c++ - 如何将值从 python 传递给 C++ 并返回?

python - 从python中的csv文件中获取特定列

python - 你如何为 numpy 和 Pandas 修复 "runtimeError: package fails to pass a sanity check"?