注意:我正在使用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中,它只会导致错误。
这将从一个有效的/ 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地址。