2014-11-20 2 views
0

그래서 저는 프로그래밍에 새로운 브랜드이며, 저를 실망스럽게 생각합니다! 내가하고 싶은 일은 4x8 텍스트 파일을 가져 와서 텍스트를 2D 목록으로 변환하여 두 문자를 바꿀 수있게하는 것입니다. 예를 들어, 반입 된 텍스트 파일은 다음과 같이 표시되는 경우파이썬에서 2D 배열의 두 문자를 교체 하시겠습니까?

다음
OOOOOOOO 
OOOXOOOO 
OOOOOOOO 
OOOOOOOO 

사용자 입력이 입력되도록 할 때 I의 X (행/열 위치)의 위치를 ​​변경할 수 있도록하고자 오 서식을 유지하기 위해 그 위치에 놓이게됩니다. 그래서 exapmle을 위해 프로그램은 사용자에게 입력을 요구하고 사용자가 "up"을 입력하면 X는 한 칸 위로 이동합니다.

OOOXOOOO 
OOOOOOOO 
OOOOOOOO 
OOOOOOOO 

나는 반복적으로 하나가 될 때마다 후 새 이동에 대한 메시지를 표시하고 새 그리드 매번 (그래서 당신은 당신이 운동을 입력 할 때마다 새로운 위치에있는 X를 볼 수 있습니다) 표시로합니다.

이것은 내가 지금까지 가지고있는 전부입니다. 나는 X를 먼저 찾아야한다는 것을 알고 있지만, 어떻게 해야할지 모르겠다. 나는 여기 붙어있다. 어떤 도움을 주셔서 감사합니다.

#Global variables for the movements 
UP = 8 
DOWN = 2 
RIGHT = 6 
LEFT = 4 

#Dimensions of grid 
ROWS = 4 
COLUMNS = 8 

def start():   
    filename = input("Enter the name of the Start Positions file: ") 
    textFile = open(filename) 
    aMaze = [line.strip() for line in textFile] 
    for r in range(ROWS): 
     for c in range(COLUMNS): 
      print(aMaze[r][c], end="") 
     print() 

def moveType(): 
    while (True): 
     try: 
      move = input("ENTER YOUR MOVE: ") 
     except ValueError: 
      print("unimportant error message") 
      continue 
     if ((int(move)) in (DOWN, LEFT, RIGHT, UP)): 
      playerMove(move) 
      continue 
     else: 
      print("unimportant error message") 
      continue    
    return(move) 

def playerMove(move): 
    move = (int(move)) 
    if (move == DOWN): 
     #need help here 
    elif (move == UP): 
     #and here 
    elif (move == LEFT): 
     #don't know what i'm doing 
    elif (move == RIGHT): 
     #also here 

start() 
moveType() 
+0

내가 이전에 이동을 기록하고 행 <= 4와 col <= 8과 같은 유효성을 확인한 다음 0으로 이전을 업데이트하고 x로 nwe를 수정하는 것이 좋습니다. – Hackaholic

+0

시작 위치 파일에 항상 정확히 하나의 X가 있습니까? 그렇다면 스와핑 문제로 생각하지 마십시오. aMaze의 대부분은 Os가 될 것이므로 추적 할 필요가 없습니다. rowX와 colX라는 X의 현재 위치를 추적하면됩니다. 그런 다음 playerMove는 방향에 따라 rowX 또는 colX를 증가 시키거나 감소시키고 이동이 가능한지 여부를 결정합니다. – linus

답변

0

추상화에 대해 배울 수있는 완벽한 기회입니다. 문제를 해결하려면 최종 문제를 쉽게 해결할 수있는 하위 문제 (기능 포함)를 생각해보십시오.

특정 경우에 X가있는 곳의 데카르트 좌표를 찾는 프로그램을 작성하는 것이 더 쉽지 않습니까? (x, y) 좌표로 그 좌표를 튜플로 저장하는 함수를 만들어서 좌표가 X이고 그 외 모든 것이 0 인 2 차원 배열로 만들 수 있습니다.

힌트 1 :

x =0 
y =0 
for row in numrows: 
    for col in numcols: 
     if array[row][col] == X 
      y = row 
      x = col 

힌트 2 :

for row in numrows: 
    for col in numcols: 
     if col is x and row is y: 
      place X 
     else: 
      place O 

참고 : 이것은 당신이 모든 성능을 이크 싶어하는 응용 프로그램 인 경우에, 당신은 확실히 통해 반복 할 필요가 없습니다 것입니다 X를 찾을 때마다 배열을 찾을 수 있습니다. X의 위치를 ​​저장하고 X 및 O를 뒤집기 위해 배열에 두 개의 액세스를 사용할 수 있습니다 (그리고해야합니다). 그러나이 문제가 해결되는 첫 번째 문제 중 하나 일 가능성이있는 것은 물론 걱정거리가 아닙니다.

희망이 도움이됩니다. 행운을 빈다.

관련 문제