ОБНОВЛЕНИЕ: Я sh сетка PYTHON - PullRequest
0 голосов
/ 03 марта 2020

Я работаю над сеткой me sh, в которой есть курсор, который перемещается при вводе назначенного номера. Мне удалось заставить курсор двигаться, единственная проблема, с которой я столкнулся, это то, что я хочу, чтобы он распечатывал местоположение обновленных координат при перемещении курсора (например, если курсор перемещается вниз на один блок, новое местоположение должно быть (0, -1)). THIS IS WHAT THE OUTPUT LOOKS LIKE

x = y = 0
size = int(input('Enter grid size: '))
print(f'Current location: ({x},{y})')

def show_grid(x, y):
    for i in range(size):
        for j in range(size):
            if i == y and j == x:
                print('+', end=' ')
            else:
                print('.', end=' ')
        print()
show_grid(x,y)

def show_menu():
    print('-- Navigation --')
    print('2 : Down')
    print('8 : Up')
    print('6 : Right')
    print('4 : Left')
    print('5 : Reset')
    print('0 : EXIT')
    return 0
show_menu()

choice = int(input('Enter an option: '))            ####current location not updating
def move(x, y, choice):
    if choice == 2:     # down
        show_grid(x, y+1)
    elif choice == 8:   # up
        show_grid(x, y-1)
    elif choice == 4:   # left
        show_grid(x-1, y)
    elif choice == 6:   # right
        show_grid(x+1, y)
    elif choice == 5:   # reset to (0,0)
        show_grid(x, y)
    elif choice == 1:
        print(choice, 'Not a valid input. Try again.')
        show_grid(x, y)
    elif choice == 3:
        print(choice, 'Not a valid input. Try again.')
        show_grid(x, y)
    elif choice == 7:
        print(choice, 'Not a valid input. Try again.')
        show_grid(x, y)
    elif choice == 9:
        print(choice, 'Not a valid input. Try again.')
        show_grid(x, y)
move(x, y, choice)



#main program
while True:
    choice = show_menu()
    if choice == 0:
        print(f'Current location: ({x},{y})')
        break
    else:
        x,y = move(x,y,choice)
    print(f'Current location: ({x},{y})')
    if 0 <= x < size and 0 <= y < size:  # inside the board
        print(f'Current location: ({x},{y})')
    else:  # outside the board
        print('The new location is off the board.')
        break
    print('Exit the program')

1 Ответ

1 голос
/ 03 марта 2020

Внутри вашего определения move() вы используете return (ie, выход из функции), прежде чем перейти к части, которая вызывает show_grid()

РЕДАКТИРОВАТЬ: вместо возврата, просто установите x, y на то, что им нужно. Кроме того, я заметил еще одну вещь, которая может вызывать у вас проблемы. Вы используете option, чтобы решить, что делать дальше, и option = show_menu(). Но, как вы определили show_menu(), он всегда возвращает 0. Чтобы options содержал ввод пользователя, вы должны либо изменить способ определения show_menu(), либо изменить способ назначения option.

Редактировать после обновления OP: Вот проблемы, которые я вижу

  1. В вашей функции show_menu(): вы никогда не просили какой-либо информации от пользователя. Вы всегда возвращаете 0.
  2. В вашей функции move(): x и y не обновляются. Вы передаете обновленные x и y на show_grid(), но после этого они не используются.
  3. Вы в настоящее время break из вашего #main program, если choice == 0.

Вот что вам нужно сделать, чтобы исправить каждую из упомянутых выше проблем:

  1. В вашей функции show_menu(): запросить ввод пользователя и вернуть его вместо 0.
  2. Возвращает новые значения x и y, которые вы в данный момент передаете show_grid().
  3. Удалить break. Если вы сделаете это без первого исправления # 1, то в конечном итоге получите l oop, но если сначала исправите # 1, он будет ждать ввода пользователя.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...