【问题标题】:Problems with understanding lists (I think)理解列表的问题(我认为)
【发布时间】: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


【解决方案1】:

看来我需要回去做更多的功课,然后再开始编码。 Python有一些我以前没有遇到过的坑和陷阱,因此我最好得到一些适当的建议,而不是试图零碎地附上它。 非常感谢大家的帮助。

【讨论】:

    【解决方案2】:

    在 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了解详情。

    【讨论】:

    • 仍然没有骰子。在第一个函数中添加了“全局象限”,我仍然遇到同样的问题。尽管我不想这样做,但我可能会尝试使用函数声明传入和传出东西,正如许多页面所建议的那样,看看是否有帮助。如果这不起作用,则其他不太明显的问题是错误的......
    • 你能删除这条评论吗?我做了一些更多的测试,发现我认为是上面的问题。我应该开始一个关于它的新线程。多多道歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多