我分配了一个变量,但它说我没有
I Assigned a Variable but it Says I Did Not
注意:我使用的是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()
内 assign randomIp
时,这才有效,否则您将需要 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 地址用于任何用途。
注意:我使用的是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()
内 assign randomIp
时,这才有效,否则您将需要 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 地址用于任何用途。