Как работает функция Python find () в приведенном ниже коде? - PullRequest
0 голосов
/ 05 мая 2020

Я просматривал решение для красивой матрицы (вопросы CodeForces). Можете ли вы объяснить, что происходит в приведенном ниже коде?

l=[2,1,0,1,2]
for i in l:
    s=input()
    if "1" in s:print(i+l[s.find("1")//2])

Ответы [ 4 ]

0 голосов
/ 05 мая 2020

Вопрос в основном таков:

Сколько шагов требуется, чтобы переместить '1' в центр матрицы 5x5 (матрица имеет все значения как '0', кроме одной позиции, где это '1')

Приведенное выше решение выглядит примерно так:

//(2,2) is the final (center) position

l=[2,1,0,1,2] // l denotes the number of steps required if '1' was found in the ith row (for instance, 2 in the 0th row indicates that two steps would be required to move from 0th row to 2nd row)

for i in l:
    s=input() // s contains values for the ith row
    // If a "1" is present in the ith row, it would mean you need to move i position up/down to reach the center row
    // Let k = s.find("1"), k here gives the column in which the "1" is present. So, an additional k//2 steps would be required to move across the columns to reach the center
    // hence i (for row movement) + k(for column movement) steps would be required to reach the center
    if "1" in s:
        print(i+l[s.find("1")//2]) 
0 голосов
/ 05 мая 2020

У вас есть список номеров. Затем вы повторяете каждый из них, так что i = 2, i = 1, .. et c. Если пользовательский ввод равен 1, он распечатает все, что в настоящее время i, плюс тот индекс ввода, который имеет 1, разделенный на 2 и заполненный.

Я бы, вероятно, отформатировал так

l=[2,1,0,1,2]
for i in l:
    s=input()
    if "1" in s:
        print(i+l[s.find("1")//2])
0 голосов
/ 05 мая 2020

Код выполняет итерацию по заданному списку чисел l. Затем для каждого из элементов в этом списке он будет запрашивать у пользователя ввод. Если пользовательский ввод содержит 1, он напечатает сумму элемента списка + заполненное деление на 2 (// операторы) индекса ПЕРВОГО появления во введенном пользователем значении. Обратите внимание, что индексы начинают отсчет с 0. Разделение на пол означает деление без запятых с округлением до ближайшего числа в нижней части (например, 2,7 будет округлено до 2)

0 голосов
/ 05 мая 2020

Код выдает ошибку. Результат показан ниже:

Traceback (последний вызов последним): файл main.py, строка 3, в s = input () EOFError: EOF при чтении строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...