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! !!
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.
Comportement de ʻinput () `
Recevoir une entrée standard (1 ligne)
Un caractère (colonne)
Un entier avec une entrée
L'entrée est composée de plusieurs entiers
Recevoir une entrée standard (plusieurs lignes)
Un entier pour chaque ligne (nombre de lignes spécifié)
Plusieurs entiers dans chaque ligne (nombre de lignes et de colonnes spécifié)
Un entier pour chaque ligne (aucun nombre de lignes spécifié)
Ce que je veux écrire sur l'entrée standard
À la fin
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
Lire 1 ligne </ b> à partir de l'entrée
Convertir en chaîne </ b> et retourner
Je pense qu'il y en a deux. Dans cet esprit, examinons un cas d'utilisation réel.
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».
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.
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
ʻ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.
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`.
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`.
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.
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
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.
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).
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
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.
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]
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.
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)
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