【发布时间】:2016-02-04 15:10:55
【问题描述】:
长话短说,我在离开一段时间后重新开始编码,并认为我会做一些相对(对我而言)简单的事情,即将 C 程序转换为 Python。我熟悉基本的 C 语言,也熟悉基本的编程概念,所以对我来说,我所问的应该没有那么难。
我正在将经典的 Star Trek 文字游戏从 C 改写为 Python。一个函数设置了游戏世界:
在咬牙切齿之后,我得出的结论是我错误地使用了列表。我的一个功能的代码是:
def setupGalaxy(难度):
for x in range(0,8):
for y in range(0,8):
sectors[x][y] = 0
quadrants[x][y].baseHere = 0
quadrants[x][y].klingonCount = 0
quadrants[x][y].starCount = 0
klingonsHere = 0
numBases = 0
for x in range(0,8):
for y in range(0,8):
J = random.randint(1,99)
baseHere = 0
if (J < 5):
numBases += 1
baseHere = 1
temp = getKlingons(difficulty)
klingonsHere += temp
quadrants[x][y].klingonCount = temp
quadrants[x][y].baseHere = baseHere
quadrants[x][y].starCount = random.randint(1,4)
print quadrants[x][y].klingonCount,quadrants[x][y].baseHere,quadrants[x][y].starCount," ",
print
numKlingons = klingonsHere
for x in range(0,8):
for y in range(0,8):
print quadrants[x][y].klingonCount,quadrants[x][y].baseHere,quadrants[x][y].starCount," ",
return
该函数应该做的是:将二维列表象限的内容初始化为0(可能没有必要,但让我放心),然后生成随机数量的克林贡语、星基和恒星并将它们放入其中列表。
我的问题是这样的:我包含了一些打印语句让我看到分配的输出,他第一个打印语句吐出了我想要看到的内容,以及随机收集的星星、克林贡语等。
第二个打印语句打印出相同的数字 64 次。在第一次和第二次之间,我看不出发生了什么变化。
我认为我在列表方面做错了。有人可以帮忙吗?
约瑟夫。
【问题讨论】:
-
您在函数中设置的所有全局变量都应声明为
global,否则它们将属于函数的命名空间(即它们将是局部变量)。这是 LEGB 规则上的tutorial -
quadrantClass是什么?看起来您正在用单个类对象填充quadrants的所有单元格,这没有意义。
标签: python list variable-assignment