理解列表的问题(我认为)

时间:2015-11-04 07:58:13

标签: python list variable-assignment

简而言之,我在一段时间之后回到编码状态,并且认为我会相对(对我来说)做一些直截了当的事情,即将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(可能没有必要,但让我有些安心),然后生成一个随机数量的克林贡语,星基和星星并将它们置于其中列表。

我的问题是这样的:我包含了一些打印语句,让我看到作业的输出,他首先打印语句吐出我想要看到的内容,以及随机收集的星星,克林贡语等。

第二个print语句打印出相同的64次。在第一次和第二次之间,我无法看到发生了什么变化。

我认为我对列表做错了。有人可以帮忙吗?

约瑟夫。

2 个答案:

答案 0 :(得分:1)

在Python中,如果在函数体内的任何位置为变量赋值,则除非明确声明为全局,否则将其视为局部值。

x = 4;
def f():
    x = 6
    print(x)
f()
print(x)

输出:

6
4

在函数开头

插入显式全局声明
x = 4;
def f():
    global x
    x = 6
    print(x)
f()
print(x)

输出:

6
6

阅读This了解详情。

答案 1 :(得分:0)

在开始编码之前,似乎我需要回去做更多的功课。我之前没有遇到过Python的一些陷阱和陷阱,因此我最好能得到一些正确的建议,而不是试图将它简单地附加起来。 非常感谢每个人的帮助。