noch eine Frage zu meinem Labyrinth:
Ich habe folgenden Code:
Code: Alles auswählen
def suggest(pos,env,arrivalpos):
print env[pos[0]+1][pos[1]]
TypeError: can only concatenate list (not "int") to list
Was ist da bei mir das Problem?
Code: Alles auswählen
def suggest(pos,env,arrivalpos):
print env[pos[0]+1][pos[1]]
Code: Alles auswählen
In [423]: [23] + 42
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/bj/<ipython console> in <module>()
TypeError: can only concatenate list (not "int") to list
Code: Alles auswählen
def suggest(pos,env,arrivalpos):
suggest_dir=[]
env[arrivalpos[0]][arrivalpos[1]]="."
print env[pos[0]][pos[1]]
if(env[pos[0]+1][pos[1]]=="F"):
print "Finished"
return [42]
if(env[pos[0]-1][pos[1]]=="F"):
print "Finished"
return [42]
if(env[pos[0]][pos[1]+1]=="F"):
print "Finished"
return [42]
if(env[pos[0]][pos[1]-1]=="F"):
print "Finished"
return [42]
if (env[pos[0]+1][pos[1]]==" "):
# & ((pos[0]+1!=arrivalpos[0]) & (pos[1]!=arrivalpos[1]))):
#print "Rechts geht es"
suggest_dir.append(True)
else:
#if((env[pos[0]+1][pos[1]]=="#") | ((pos[0]+1==arrivalpos[0]) & (pos[1]==arrivalpos[1]))):
suggest_dir.append(False)
#print "Rechts geht es nicht"
if (env[pos[0]-1][pos[1]]==" "):# & ((pos[0]-1!=arrivalpos[0]) & (pos[1]!=arrivalpos[1]))):
suggest_dir.append(True)
#print "Links geht es"
else:
#if((env[pos[0]-1][pos[1]]=="#") | ((pos[0]-1==arrivalpos[0]) & (pos[1]==arrivalpos[1]))):
suggest_dir.append(False)
#print "Links gehts nicht"
if (env[pos[0]][pos[1]-1]==" "):# & ((pos[0]!=arrivalpos[0]) & ((pos[1]-1)!=arrivalpos[1]))):
suggest_dir.append(True)
#print "Oben geht es"
else:
#if((env[pos[0]][pos[1]-1]=="#") | ((pos[0]==arrivalpos[0]) & (pos[1]-1==arrivalpos[1]))):
suggest_dir.append(False)
#print "Oben geht es nicht"
if (env[pos[0]][pos[1]+1]==" "):# & ((pos[0]!=arrivalpos[0]) & (pos[1]+1!=arrivalpos[1]))):
suggest_dir.append(True)
#print "Unten geht es"
else:
#if((env[pos[0]][pos[1]+1]=="#") | ((pos[0]==arrivalpos[0]) & (pos[1]+1==arrivalpos[1]))):
suggest_dir.append(False)
#print "Unten geht es auch nicht..."
#print suggest_dir
return suggest_dir
Code: Alles auswählen
def solve_maze(self):
Start=self.getStart()
Pos_x_last_working=Start[0]
Pos_y_last_working=Start[1]
Pos_x_last=Start[0]
Pos_y_last=Start[1]
Pos_x=Start[0]
Pos_y=Start[1]
Stop=self.getFinish()
maze=self.maze_Rows
counter=0
suggested_dir=[]
'Markierung des Startpunkts'
self.maze_Rows[Start[0]][Start[1]]='.'
'Bewegung'
i = 0
print "Startet die Bewegung"
while((Pos_x !=Stop[0] or Pos_y !=Stop[1]) or suggested_dir!=42):
if i >=10:
return -1
break
i=i+1
Pos=[]
Pos_arr=[]
Pos_arr.append(Pos_x_last)
Pos_arr.append(Pos_y_last)
Pos.append(Pos_x)
Pos.append(Pos_y)
suggested_dir=suggest(Pos,self.maze_Rows,Pos_arr)
#print "Bin am Punkt:"
#print Pos
#print suggested_dir
#print Pos_arr
counter=0
for i in xrange(len(suggested_dir)):
if(suggested_dir[i]==True):
counter=counter+1
time.sleep(1)
print counter
print Pos_x,Pos_y
print Pos_x_last_working,Pos_y_last_working
print "Kurze Pause"
time.sleep(1)
if(counter>1):
Pos_x_last_working=Pos
if(counter==0):
Pos_x_last=Pos_x
Pos_y_last=Pos_y
Pos_x=Pos_x_last_working
Pos_y=Pos_y_last_working
if suggested_dir[0] == 42:
print "Finished"
return 0
#time.sleep(1)
'''Ab hier muss noch gearbeitet werden!'''
if(suggested_dir[0]==True):
Pos_x_last=Pos_x
Pos_y_last=Pos_y
Pos_x=Pos_x+1
Pos_y=Pos_y
print "Nach rechts bewegt"
else:
if(suggested_dir[1]==True):
Pos_x_last=Pos_x
Pos_y_last=Pos_y
Pos_x=Pos_x-1
Pos_y=Pos_y
print "Nach links bewegt"
else:
if(suggested_dir[2]==True):
Pos_x_last=Pos_x
Pos_y_last=Pos_y
Pos_x=Pos_x
Pos_y=Pos_y-1
print "Nach oben bewegt"
else:
if(suggested_dir[3]==True):
Pos_x_last=Pos_x
Pos_y_last=Pos_y
Pos_x=Pos_x
Pos_y=Pos_y+1
print "Nach unten bewegt"
print Pos
print self.maze_Rows
print "Finished"
Code: Alles auswählen
DIRECTIONS = RIGHT, LEFT, UP, DOWN = [(1, 0), (-1, 0), (0, -1), (0, 1)]
DIRECTION_TO_STR = { RIGHT: 'rechts', LEFT: 'links', UP: 'oben', DOWN: 'unten' }
FINISH_FIELD = 'F'
FREE_FIELD = ' '
VISITED_FIELD = '.'
def suggest_directions(pos, maze):
x, y = pos
result = list()
for direction in DIRECTIONS:
x_delta, y_delta = direction
field = maze[x + x_delta, y + y_delta]
if field == FINISH_FIELD:
return [direction]
if field == FREE_FIELD:
result.append(direction)
return result
class Maze(object):
def solve_maze(self):
last_x, last_y = x, y = self.start
print 'Startet die Bewegung'
for i in xrange(10):
if (x, y) == self.finish:
print self.maze_Rows
print 'Finished'
return True
self[x, y] = VISITED_FIELD
suggested_directions = suggest_directions((x, y), self)
time.sleep(1)
print len(suggested_directions)
print x, y
print 'Kurze Pause'
time.sleep(1)
if suggested_directions:
x_delta, y_delta = direction = suggested_directions[0]
last_x, x = x, x + x_delta
last_y, y = y, y + y_delta
print 'Nach', DIRECTION_TO_STR[direction], 'bewegt.'
else:
#
# Hier kommt der Code hin für den Fall, dass man keine
# Bewegungsmöglichkeit mehr hat.
#
pass
return False
Code: Alles auswählen
>>> def foo(): print "foo"
...
>>> def bar(): print "bar"
...
>>> switch = {"f":foo, "b":bar}
>>> switch["f"]()
foo
>>> switch["b"]()
bar