2013-09-04 3 views
0

Langton Ant 시뮬레이터의 배경을 코딩하고 있습니다. 그러나 문제는 자체적으로 문제에 대한 지식이 필요하지 않으므로 걱정하지 마십시오.기능이 원하는대로 출력되지 않거나 예상대로 출력되지 않습니다.

유용한 정보가 포함됩니다 : 변수 '그리드'항상 같은 목록의 일부 목록에 해당 또한

grid = [['black', 'black'], ['white', 'black'],['black', 'white']] 

을, 나는 다음이 사전에 이미 정의 :

Dict_White= {'North':'East','East':'South','South':'West','West':'North'} 


Dict_Black= {'North':'West','West':'South','South':'East','East':'North'} 

def orientation_and_colour_change(ant_row,ant_col,orientation): 
    if grid[ant_row][ant_col]=='Black': 
     grid[ant_row][ant_col]='White' 
     orientation=Dict_Black[orientation] 
    elif grid[ant_row][ant_col]=='White': 
     grid[ant_row][ant_col]='Black' 
     orientation=Dict_White[orientation] 
    return orientation 

그것은 의도 무엇을 꽤 분명이 나를 귀찮게하는 기능입니다 그리드 내의 '위치'와 '방향'을 가져 와서 새 방향을 출력하는 기능의 사용은 본질적으로 사전의 키 값입니다. 또한 모눈 항목 중 하나를 조정해야합니다 (예 : '검은 색'에서 '흰색'또는 '흰색'에서 '검은 색'으로). 그러나 내가 겪고있는 문제는 다음과 같습니다.

방향 반환 값은 항상 입력 값과 동일하며 입력 키가 아닌 사전 값을 반환하는 함수를 통해 명확하게 전달되지 않습니다.

둘째, 함수는 미리 정의 된 표를 예상대로 편집하지 않습니다.

이러한 문제가 발생하는 이유는 무엇입니까?

편집 : 간단한 대문자 대 비 대문자 불평등 문제였습니다. 위의 내용을 편집자의 과실의 증거로 남겨 둘 것입니다. 건배 피터 DeGlopper!

+1

인가? 그렇다면 대소 문자가 일치하지 않습니다. '격자'정의에서 '검은 색'과 함수에서 '검은 색'에 대한 평등 테스트가 있습니다. 'if' 조건을 만족하지 않으므로 아무 변화도 일어나지 않고'orientation'도 변하지 않습니다. –

+0

Wooooow! 고쳐 줬어! 결국 그것은 대문자 문제 일뿐입니다. 고마워! :) –

답변

0

귀하의 모든 정보가 정확하다면 문제는 대소 문자가 구분됩니다 ("검은 색"대 "검은 색"). 여담으로

이 더 잘 작동 : 라이브 코드 것을

directions = dict(
    white={'North':'East','East':'South','South':'West','West':'North'}, 
    black={'North':'West','West':'South','South':'East','East':'North'}, 
) 

def orientation_and_colour_change(ant_row,ant_col,orientation): 
    "Return new orientation, and change grid state as a side effect." 
    color = grid[ant_row][ant_col] 
    grid[ant_row][ant_col] = 'white' if color == 'black' else 'black' 
    return directions[color][orientation] 
+0

'orientation = directions [color] [orientation]'면,'return orientation'은 새로운 방향에 할당 된 방향을 설정하게됩니까? 이제 새 방향을 사용하여 두 번째 함수를 전달하려고하기 때문에 ... –

+0

"orientation"은 로컬 이름이므로 아니요. 다른 함수에 해당 매개 변수를 지정하고 "f (..., orientation = g (...))"를 중첩 호출합니다. 또한 모든 것이 클래스 여야하며 그리드의 부작용은 코드 냄새가 아닙니다 (예 : "self.grid = ..."사용). – jhermann

0

grid [ant_row] [ant_col] == 'black': 그리드 [ant_row] [ant_col] == 'Black': "인 경우"NOT "을 시도해야합니다. "elif grid [ant_row] [ant_col] == 'White':"에 대해서도 마찬가지입니다. 과제를 수행 할 때도 마찬가지입니다.

관련 문제