简而言之,我在一段时间之后回到编码状态,并且认为我会相对(对我来说)做一些直截了当的事情,即将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次。在第一次和第二次之间,我无法看到发生了什么变化。
我认为我对列表做错了。有人可以帮忙吗?
约瑟夫。
答案 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的一些陷阱和陷阱,因此我最好能得到一些正确的建议,而不是试图将它简单地附加起来。 非常感谢每个人的帮助。