注意:我使用的是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)
之后打印一个不同的随机数。代码将是什么呢?我希望它可以打印出"."
之类的内容。每个周期后的数字完全不同。 最佳答案
您创建了一个局部变量,但是随后尝试访问同名的全局变量。
您可以简单地省略global
关键字。
def game():
randomIp = ...
def tutorial():
print(randomIp + ...)
请注意,这仅在未在
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
localhost块,多播块等。根据网络掩码,它可能会生成作为广播地址的地址。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地址用于任何用途。