请帮我写一下程序 updateLocn(x,y,state)
以便将地图中(x,y)处的字符改为所选状态。我试着自己写了一下,但是不行。
T=树; G=偷你东西的妖精; g=装金子的盒子; ~=河流; w=墙; -=地板; b=空盒子; = =锁住的门; k=锁住的门的钥匙; *=出口门。
worldMap = [
"TTTT TTTT g wwwwwwwwwwwwwwww",
"T gT w----=---b--=bgw",
"TTTTGTTT =----w------w-gw",
"TTTTTTTTTTT kwwwwwwwwwwwww*ww",
"~~~~~~~~~~~~~~~~~~~~~~~~~T TT",
"~~~~~~~~~~~~~~~~~~~~~~~~~T TT",
" ~~~~~ ",
" ~~~~~ "]
def printMap():
global worldMap
for line in worldMap:
print(line)
def getLocn(x,y):
global worldMap
locn = worldMap[y][x]
return locn
if x < 0 or y < 0:
return None
def describeLocn(x,y):
global worldMap
locn = getLocn(x,y)
if locn == "T":<br/>
return ("Dense forest")
elif locn == "t":
return ("Light woods")
elif locn == "w":
return ("Wall")
else :
return ("Meadows")
if x < 0 or y < 0:
return None
def updateMap(x,y,newState):
global worldMap
locn = getLocn(x,y)
locn = newState
newState = list(worldMap)
worldMap = ''.join(newState)
最后一个过程是我的试用代码。我应该在这里使用x,y,newState变量。
首先是一些问题:当你把一个变量赋值两次时,第一个变量还不如不赋。我的建议是把位置的更新从地方的标志(你想在那里有什么的意思)到它在世界中的位置分开。
例如,如果你想插入一个新的状态newstate在x,y。
def updateLocn(x,y,newstate):
global worldMap
If x<0 or y<0:
Handle the exception(usually using raise IndexError(errorstr))
worldMap[y][x]=newstate
这应该可以和你处理负索引的方法一样。请记住,当你访问一个列表的元素时,改变它不会改变列表。你必须在正确的索引处改变列表。
此外,检查参数应该在前面,而不是最后。在getlocn中,x,y的检查永远不会发生,因为你首先返回你在那里找到的任何东西。
如果你做了
locn = worldMap[y][x] locn = state
那么这并没有改变 worldMap
. 这个语句得到和元素的 worldMap
到本地变量 locn
然后是变量 locn
被改变。
你必须给元素的 worldmap
:
def updateMap(x,y,newState):
worldMap[y][x] = newState
worldMap = [
"TTTT TTTT g wwwwwwwwwwwwwwww",
"T gT w----=---b--=bgw",
"TTTTGTTT =----w------w-gw",
"TTTTTTTTTTT kwwwwwwwwwwwww*ww",
"~~~~~~~~~~~~~~~~~~~~~~~~~T TT",
"~~~~~~~~~~~~~~~~~~~~~~~~~T TT",
" ~~~~~ ",
" ~~~~~ "]
for line in worldMap:
print( line )
def printMap():
'''Display the wolrdMap'''
global worldMap
for line in worldMap:
print(line)
def updateMap(x,y,state):
'''To change an object at a location'''
global worldMap
worldMap[y] = worldMap[y][:x] + state + worldMap[y][(x+y):]
for line in worldMap:
print(line)
if x < 0 or y < 0:
raise IndexError