Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro

-1. Introduction et bouche avant

Cet article est presque le même que celui publié sur mon Blog Hatena.

Je fais de la programmation de compétition, qui est devenue un sujet brûlant récemment (ne le cherchez pas car c'est un codeur très faible ... qui pleure).

En C ++, vous pouvez simplement connecter >> après std :: cin (biais), mais pas Python, alors voici quelques moyens de recevoir une entrée standard.

Le code ci-dessous a été testé avec Python 3.7.3.

Si vous avez des erreurs, faites-le moi savoir! !!

0. Table des matières

Dans la norme de programmation de la compétition, l'explication est toujours centrée sur les entiers, mais je pense que la structure de base ne change pas que vous receviez un entier ou une chaîne de caractères.

1. Comportement de ʻinput () `

input([prompt])

Si l'invite d'argument est présente, elle sera écrite dans la sortie standard, à l'exclusion des sauts de fin. La fonction lit ensuite une ligne à partir de l'entrée, la convertit en chaîne et la renvoie (sauf pour le saut de fin). Une erreur EOFError est générée lorsque l'EOF est chargé.

Source: Documentation Python 3.7.4

(^ o ^) ………… Hé.

Pour le moment, ce que vous devez retenir lors de la compétition professionnelle

Je pense qu'il y en a deux. Dans cet esprit, examinons un cas d'utilisation réel.

2. Recevoir une entrée standard (1 ligne)

Exemple 1. Caractère (chaîne) avec une entrée

contribution

apple

Code 1

s = input()
print(s)

Sortie 1

apple

Le type de la variable «s» est, bien entendu, le type «str».

Si vous souhaitez lister chaque caractère

Code 2

s = list(input())
print(s)

Sortie 2

['a', 'p', 'p', 'l', 'e']

Le type de la variable «s» est le type «liste».

Exemple 2. Un entier avec une entrée

contribution

334

Code 3

n = int(input())
print(n)

Sortie 3

334

Puisque ʻinput () renvoie 334 de type str, il est inclus dans ʻint.

Par conséquent, le type de la variable «n» est de type «int».

Bien sûr, même si l'entrée est un nombre, si vous voulez le traiter comme une chaîne de caractères, vous pouvez l'écrire sous forme de code 1 ou 2 ci-dessus.

Exemple 3. L'entrée est composée de plusieurs entiers

Il est très largement utilisé chez les professionnels de la compétition. Utilisez une fonction appelée map.

Entrée (chaque nombre est séparé par un espace demi-largeur)

334 -334 364

Code 4

a, b, c = map(int, input().split())
print(a, b, c)

Sortie 4

334 -334 364

Si vous écrivez ce que vous faites

  1. ʻinput (). Split () retourne une liste avec chaque entier séparé par un espace demi-largeur comme élément (dans l'exemple ci-dessus, ['334', '- 334' ,, " «364»] »). J'ai écrit "entier comme élément", mais Python dit que ce sont toujours une liste de chaînes.

  2. map est simplement une fonction qui applique le même traitement à tous les éléments d'une liste (ou quelque chose). Ici, les entiers traités comme des chaînes de caractères sont convertis en type ʻint`.

  3. Insérez chaque élément dans la variable «a» «b» c ».

Dans le code 4, j'ai préparé trois variables et les ai placées dans chacune, mais bien sûr, vous pouvez aussi les lister.

Code 5

a = list(map(int, input().split()))
print(a)

Sortie 5

[334, -334, 364]

Une chose à noter est que vous devez l'enfermer dans list et le convertir en un type liste. C'est parce que la valeur de retour de map n'est pas une liste, mais un objet de carte , quelque chose qui est difficile à comprendre pour un putain de programmeur </ s>.

Lors de la réception de plusieurs chaînes </ b>, c'est presque la même chose que les codes 4 et 5. Cependant, s'il reste ʻint, ValueError` Faisons-le correctement parce qu'il crache.

(Ajouté le 31/12/2019) </ b> Lors de la réception de plusieurs chaînes de caractères, vous pouvez simplement utiliser ʻinput (). Split () au lieu de passer de map à list`.

3. Recevoir une entrée standard (plusieurs lignes)

En gros, vous répétez simplement la méthode ci-dessus pour le nombre de lignes, vous pouvez donc simplement sauter dans la boucle for et la faire tourner.

Ici, nous décrirons la méthode en utilisant la notation d'inclusion.

Exemple 1. Un entier pour chaque ligne (avec le nombre de lignes spécifié)

La plupart des professionnels de la compétition vous donnent le nombre de lignes à entrer en premier, nous allons donc vous montrer ici comment participer en fonction de cela.

contribution

5
441
484
529
576
625
  • Cependant, la première ligne indique le nombre de lignes pour l'entrée suivante.

Code 6

n = int(input())
l = [int(input()) for i in range(n)]
print(n, l)

Sortie 6

5 [441, 484, 529, 576, 625]

Bien sûr, il peut également être utilisé pour les chaînes de caractères en supprimant ʻintqui entoure ʻinput ().

C'est la méthode (lien) que j'ai récemment visitée sur Twitter.

Code 7

n, *l = map(int, open(0))

Similaire à la sortie 6. hyoujun.PNG

Cependant, lors d'un test dans un environnement local, si vous exécutez le programme puis entrez l'entrée standard, il y a de fortes chances que cela ne fonctionne pas. Honnêtement, je ne suis pas sûr de ce que je fais, alors je vais laisser cela à la référence au code 7. Asakugaku est sorti ... (déjà sorti).

Exemple 2. Plusieurs entiers dans chaque ligne (nombre de lignes et de colonnes spécifié)

Il semble être utilisé pour saisir des problèmes sur un plan bidimensionnel ou des problèmes dans lesquels ce qui apparaît a plusieurs éléments.

Faites pivoter le code 5 dans la notation d'inclusion de liste.

contribution

5 9
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
  • Cependant, la première ligne montre le nombre de lignes et le nombre de colonnes dans l'ordre.

Code 8

n, m = map(int, input().split())
l = [list(map(int, input().split())) for i in range(n)]
print(n, m, l)

Sortie 8

5 9 [[1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 4, 6, 8, 10, 12, 14, 16, 18], [3, 6, 9, 12, 15, 18, 21, 24, 27], [4, 8, 12, 16, 20, 24, 28, 32, 36], [5, 10, 15, 20, 25, 30, 35, 40, 45]]

Je suis désolé, c'est difficile à voir, mais vous pouvez voir que la variable «l» contient une liste à deux dimensions. Le nombre de colonnes n'est pas utilisé en Python. Tu l'as fait.

Exemple 3. Un entier pour chaque ligne (aucun nombre de lignes spécifié)

Je pense que c'est plus un aspect pratique qu'un professionnel de la concurrence.

contribution

441
484
529
576
625

Code 9

import sys
array = []
for i in sys.stdin.readlines():
    array.append(int(i.rstrip()))
print(array)

Sortie 9

[441, 484, 529, 576, 625]

hyoujun2.PNG

Si j'avoue, je ne vais pas l'utiliser dans la compétition pro, alors j'y ai réfléchi maintenant. Est-ce vraiment vrai ...?

Le code 9 risque également de ne pas fonctionner correctement si vous exécutez le programme et que vous le saisissez par défaut dans un environnement local.

4. Ce que je veux écrire sur l'entrée standard

  • La grande différence entre ʻinput () et sys.stdin.readline () est de savoir si le caractère de saut de ligne de fin est inclus ou non. ʻInput () exclut le caractère de saut de ligne de fin, tandis quesys.stdin.readline ()contient le caractère de saut de ligne. Ainsi, lorsque vous utilisez sys.stdin.readline (), utilisez souventrstrip ()pour supprimer le caractère de saut de ligne (voir Google pour plus d'informations).

  • Il semble que la notation d'inclusion de liste soit plus rapide que d'écrire une boucle for et d'utiliser la notation d'inclusion de liste (article de référence: https://qiita.com/intermezzo-fr/items/43f90e07e4cebe63aeb6)

5. À la fin

C'était étonnamment long quand je l'ai écrit. Comme je l'ai écrit au début, faites-le moi savoir si vous avez des erreurs!

Recommended Posts