Итак, вы начали соревновательное программирование, но испытываете трудности с вводом и форматированием вывода даже в самых простых? Нет проблем, вы попали в нужное место, этот пост расскажет вам о наиболее важных методах ввода и вывода, используемых в конкурентном программировании на Python.

Вход

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

1. Принятие одиночного ввода

Если вы хотите использовать только один ввод, вам нужно использовать только функцию input(), а затем вы можете преобразовать ее в нужный тип. Например,

Для строк используйте n = input()

Для целых чисел используйте n = int(input())

Для чисел с плавающей запятой или десятичных чисел используйте n=float(input())

2. Принимая известное количество входов

Если вы хотите использовать фиксированное количество входов, разделенных пробелами (например, для размеров матрицы), используйте следующую технику

Для струнных m,n = input().split()

Это назначит одну из двух строк, разделенных пробелом, как m, так и n соответственно.

Для целых чисел и чисел с плавающей запятой m,n = map(int,input().split()) или m,n = map(float,input().split())

Как мы знаем, input().split() возвращает итерируемый объект, поэтому мы преобразуем каждый из объектов в целое число, используя map(), который применяет функцию (int() в нашем случае) к каждому объекту итерируемого объекта.

Если у вас есть два аргумента, но вы не хотите, чтобы два теряли значение переменной для одного из них, вы можете использовать _ вместо него, например:

Вы хотите взять только первое и третье целые числа в переменных m и n, в примере, приведенном ниже, вы должны использовать следующий фрагмент кода:

1 2 3
m,_,n = map(int,input().split())

3. Принимая переменное количество входов

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

Для струнных -

I love python
l = list(input().split())

Значение l будет l=['I','love','python'].

Для целых чисел или чисел с плавающей запятой -

1 2 3 4 5 6 7
l = list(map(int,input().split())

Значение l будет l = [1,2,3,4,5,6,7].

Если вам нужны наборы или кортежи, используйте tuple() или set() вместо list().

4. Принятие фиксированных значений и переменного количества входных данных.

Если вы хотите сохранить начальные значения в переменных и оставшиеся значения в списке, мы используем *, рассмотрим следующие примеры.

hello 1 2 3 4
s,*l = input().split()
l = list(map(int,l))

Получим s='hello' и l=[1,2,3,4]

Немного более сложный пример:

hello 3 1 2 3
_,n,*l = input().split()
n = int(n)
l = list(map(int,l))

Получим n=3 и l=[1,2,3].

Я надеюсь, что к настоящему моменту у вас возникла идея вводить в python любой ввод, разделенный пробелами.

Выход

Вывод данных не был бы таким сложным, единственные возможные случаи:

1. Вывод на разные строки

Почти 90% задач требуют вывода таким образом. Это очень просто, рассмотрим следующий пример -

result = [1,2,3,4,5]
for i in result:
   print(i)

Результат будет-

1
2
3
4
5

2. Вывод в той же строке

Если вы хотите вывести результат в той же строке, вам нужно будет использовать атрибут end из print()

result = [1,2,3,4,5]
for i in result:
   print(i, end=' ')

На выходе будет 1 2 3 4 5

3. Продвинутые методы вывода

Некоторые проблемы, такие как codejam Google и кикстарт, требуют, чтобы вы указали номер дела с выводом, для чего мы используем C-подобную технику для вывода вывода.

Например -

result = [15,23,32]
for i in range(len(result)):
   print("Case #{}: {}".format(i+1, result[i]))

Это даст следующий результат:

Case #1: 15
Case #2: 23
Case #3: 32

Здесь {} действует как заполнитель для переменной, которая предоставляется в format() так же, как %d в C. Вот еще несколько примеров:

print("I love {}".format("python"))
l=['python','is','the','best','language']
print("I love python because {}".format(' '.join(l)))

Выход-

I love python
I love python because python is the best language

К настоящему времени я надеюсь, что вы поняли все методы ввода и вывода, используемые в соревновательном программировании на Python.

Если вы хотите увидеть какие-то решенные проблемы на Hackerearth и Hackerrank, то вот ссылки на репозитории github некоторых из моих решенных проблем на обеих платформах (почти все решения имеют ссылку на проблему, закомментированную в первой строке. ).