Ошибка в коде программы, которая запрашивает ввод индекса для двумерного массива и выводит значение по этому индексу.

У меня есть задача, в которой мне нужно сделать следующее:

Напишите программу, позволяющую пользователю вводить целочисленные значения и запрашивать двумерный массив размером 9x9. Затем ваша программа должна запросить у пользователя пару координат (x, y), разделенных пробелом, и вернуть значение в позиции, указанной заданными координатами. Например, 0 3 должно возвращать значение 7 (значение в первой строке, четвертом столбце, учитывая, что индексы массива начинаются с нуля). Предположим, что каждое целое число представляет собой одну цифру от 1 до 9. Введите -1 для любой координаты, чтобы завершить программу.

Я продолжаю получать эту ошибку:

недопустимый литерал для int() с основанием 10: ''

это код:

print("Enter an array:")
array_9x9 = [input() for i in range(9)]    

while True:
    # Read a line of coordinates, split into two elements, convert to integers
    x, y = map(int, input("Enter coordinates: ").split(' ', 2))
               
    # Stop if sentinel in either coordinate
    if -1 in (x, y):
        print("DONE")
        break
    # print the element at the specified coordinates
    print('Value = ' [array_9x9[x][y]])

это вывод:

Sample I/O:
Enter an array:
359716482
867345912
413928675
398574126
546281739
172639548
984163257
621857394
735492861
Enter coordinates:
0 3
Value = 7
Enter coordinates:
5 5
Value = 9
Enter coordinates:
8 8
Value = 1
Enter coordinates:
-1 -1
DONE

person Community    schedule 27.05.2021    source источник
comment
Строка map(int, ...) одновременно делает больше, чем вы сейчас можете понять. Разделите его на несколько строк, каждая из которых выполняет только одно действие, чтобы понять, где происходит ошибка. Это также позволяет вам распечатать промежуточные значения, чтобы проверить, соответствуют ли они тому, что вы ожидаете.   -  person mkrieger1    schedule 28.05.2021
comment
В какой момент в примере ввода и вывода возникает ошибка? Вроде все работает правильно.   -  person mkrieger1    schedule 28.05.2021


Ответы (1)


Вы не обрабатываете ошибки, возникающие, когда пользователь вводит недопустимые значения. При появлении запроса, если пользователь просто ничего не вводит и нажимает, вы видите описанную вами ошибку. Точно так же, если пользователь вводит нечисловые или неожиданные значения, вы получите аналогичную ошибку.

while True:
    try:
        x, y = map(int, input("Enter coordinates: ").split(' ', 2))
    except ValueError:
        continue
               
    if -1 in (x, y):
        print("DONE")
        break

    print('Value = ', array_9x9[x][y])  # fixed this line

Вы также можете рассмотреть возможность дополнительной обработки ошибок, если пользователь вводит допустимые числа, которые являются недопустимыми индексами (например, 12 или -2).

person Woodford    schedule 27.05.2021