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

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

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 ,这才会起作用,否则您将需要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地址。