Zusammenfassung der Standardeingabe von Python, die in Competition Pro verwendet werden kann

-1. Einführung & Vordermund

Dieser Artikel entspricht fast dem Artikel in meinem Hatena-Blog.

Ich mache Wettbewerbsprogrammierung, was in letzter Zeit ein heißes Thema geworden ist (suche nicht danach, weil es ein sehr schwacher Programmierer ist ... weint).

In C ++ können Sie einfach >> nach std :: cin (Bias) verbinden, Python jedoch nicht. Hier sind einige Möglichkeiten, um Standardeingaben zu erhalten.

Der folgende Code wurde mit Python 3.7.3 getestet.

Wenn Sie Fehler haben, lassen Sie es mich bitte wissen! !!

0. Inhaltsverzeichnis

Im Wettbewerbsprogrammierstandard konzentriert sich die Erklärung auf Ganzzahlen, aber ich denke, dass sich die Grundstruktur nicht ändert, ob Sie Ganzzahlen oder Zeichenfolgen erhalten.

1. Verhalten von input ()

input([prompt])

Wenn die Argument-Eingabeaufforderung vorhanden ist, wird sie in die Standardausgabe geschrieben, ausgenommen nachgestellte Unterbrechungen. Die Funktion liest dann eine Zeile aus der Eingabe, konvertiert sie in eine Zeichenfolge und gibt sie zurück (mit Ausnahme der nachfolgenden Unterbrechung). Ein EOFError wird ausgelöst, wenn der EOF geladen wird.

Quelle: Python 3.7.4-Dokumentation

(^ o ^) ………… Hey.

Was Sie vorerst im professionellen Wettbewerb gedrückt halten sollten

Ich denke es gibt zwei. Schauen wir uns vor diesem Hintergrund einen tatsächlichen Anwendungsfall an.

2. Standardeingang empfangen (1 Zeile)

Beispiel 1. Zeichen (Zeichenfolge) mit einer Eingabe

Eingang

apple

Code 1

s = input()
print(s)

Ausgabe 1

apple

Der Typ der Variablen s ist natürlich der Typ str.

Wenn Sie jedes Zeichen auflisten möchten

Code 2

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

Ausgabe 2

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

Der Typ der Variablen s ist der Typ list.

Beispiel 2. Eine Ganzzahl mit einer Eingabe

Eingang

334

Code 3

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

Ausgabe 3

334

input () gibt 334 vom Typ str zurück, ist also in int eingeschlossen.

Daher ist der Typ der Variablen "n" der Typ "int".

Selbst wenn die Eingabe eine Zahl ist und Sie sie wie eine Zeichenfolge behandeln möchten, können Sie sie natürlich als Code 1 oder 2 oben schreiben.

Beispiel 3. Die Eingabe besteht aus mehreren Ganzzahlen

Es wird überwiegend bei Wettkampfprofis eingesetzt. Verwenden Sie eine Funktion namens "map".

Eingabe (jede Zahl ist durch ein Leerzeichen halber Breite getrennt)

334 -334 364

Code 4

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

Ausgabe 4

334 -334 364

Wenn Sie aufschreiben, was Sie tun

  1. input (). Split () gibt eine Liste zurück, wobei jede Ganzzahl durch ein Leerzeichen halber Breite als Element getrennt ist (im obigen Beispiel ['334', '- 334', '364'] ). Ich habe "Ganzzahl als Element" geschrieben, aber Python sagt, dass dies immer noch eine Liste von Zeichenfolgen ist.

  2. map ist einfach eine Funktion, die auf alle Elemente einer Liste (oder etwas) dieselbe Verarbeitung anwendet. Hier werden die als Zeichenfolgen behandelten Ganzzahlen in den Typ "int" konvertiert.

  3. Füllen Sie jedes Element in die Variable a`` b`` c ein.

In Code 4 habe ich drei Variablen vorbereitet und in jede eingefügt, aber Sie können sie natürlich auch auflisten.

Code 5

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

Ausgabe 5

[334, -334, 364]

Eine Sache zu beachten ist, dass Sie es in "Liste" einschließen und es in einen "Listentyp" konvertieren müssen. Dies liegt daran, dass der Rückgabewert von map keine Liste ist, sondern ein Kartenobjekt , was für einen verdammten Programmierer schwer zu verstehen ist </ s>.

Wenn mehrere Zeichenfolgen </ b> empfangen werden, entspricht dies fast den Codes 4 und 5. Wenn es jedoch "int" bleibt, "ValueError" Lass es uns richtig machen, weil es spuckt.

(Hinzugefügt am 31.12.2019) </ b> Wenn Sie mehrere Zeichenfolgen empfangen, können Sie einfach "input (). Split ()" verwenden, anstatt von "map" zu "list" zu wechseln.

3. Standardeingabe empfangen (mehrere Zeilen)

Grundsätzlich wiederholen Sie einfach die obige Methode für die Anzahl der Zeilen, sodass Sie einfach in die for-Schleife springen und sie drehen können.

Hier beschreiben wir die Methode unter Verwendung der Einschlussnotation.

Beispiel 1. Eine Ganzzahl für jede Zeile (mit angegebener Anzahl von Zeilen)

Die meisten Wettkampfprofis geben Ihnen die Anzahl der Zeilen an, die Sie zuerst eingeben müssen. Deshalb zeigen wir Ihnen hier, wie Sie entsprechend eingeben können.

Eingang

5
441
484
529
576
625
  • Die erste Zeile zeigt jedoch die Anzahl der Zeilen für die nachfolgende Eingabe.

Code 6

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

Ausgabe 6

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

Natürlich kann es auch für Zeichenketten verwendet werden, indem das "int" entfernt wird, das "input ()" enthält.

Dies ist die Methode (Link), die ich kürzlich auf Twitter besucht habe.

Code 7

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

Ähnlich wie bei Ausgabe 6. hyoujun.PNG

Wenn Sie jedoch beim Testen in einer lokalen Umgebung das Programm ausführen und dann die Standardeingabe eingeben, besteht eine hohe Wahrscheinlichkeit, dass es nicht funktioniert. Ehrlich gesagt bin ich mir nicht sicher, was ich tue, also überlasse ich dies dem Verweis auf Code 7. Asakugaku ist raus ... (schon raus).

Beispiel 2. Mehrere Ganzzahlen in jeder Zeile (Anzahl der angegebenen Zeilen und Spalten)

Es scheint zur Eingabe von Problemen auf einer zweidimensionalen Ebene oder von Problemen verwendet zu werden, bei denen das, was erscheint, mehrere Elemente enthält.

Drehen Sie Code 5 in der Listeneinschlussnotation.

Eingang

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
  • Die erste Zeile zeigt jedoch die Anzahl der Zeilen und die Anzahl der Spalten in der angegebenen Reihenfolge.

Code 8

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

Ausgabe 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]]

Es tut mir leid, dass es schwer zu sehen ist, aber Sie können sehen, dass die Variable "l" eine zweidimensionale Liste enthält. Die Anzahl der Spalten wird in Python nicht verwendet. Du hast es geschafft.

Beispiel 3. Eine Ganzzahl für jede Zeile (keine Anzahl von Zeilen angegeben)

Ich denke, dies ist eher ein praktischer Aspekt als ein Wettkampfprofi.

Eingang

441
484
529
576
625

Code 9

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

Ausgabe 9

[441, 484, 529, 576, 625]

hyoujun2.PNG

Wenn ich gestehe, werde ich es nicht im Wettbewerbsprofi verwenden, also habe ich jetzt darüber nachgedacht. Ist es wirklich richtig ...?

Code 9 funktioniert wahrscheinlich auch nicht gut, wenn Sie das Programm ausführen und es dann standardmäßig in einer lokalen Umgebung eingeben.

4. Was ich über Standardeingabe schreiben möchte

  • Der große Unterschied zwischen "input ()" und "sys.stdin.readline ()" besteht darin, ob es ein nachfolgendes Unterbrechungszeichen enthält oder nicht. input () schließt das nachfolgende Zeilenvorschubzeichen aus, während sys.stdin.readline () das Zeilenvorschubzeichen enthält. Wenn Sie also "sys.stdin.readline ()" verwenden, verwenden Sie häufig "rstrip ()", um das Zeilenumbruchzeichen zu entfernen (weitere Informationen finden Sie bei Google).

  • Es scheint, dass die Listeneinschlussnotation schneller ist als das Schreiben einer for-Schleife und die Verwendung der Listeneinschlussnotation (Referenzartikel: https://qiita.com/intermezzo-fr/items/43f90e07e4cebe63aeb6)

5. Am Ende

Es war unerwartet lange, als ich es schrieb. Wie ich zu Beginn schrieb, lassen Sie mich bitte wissen, wenn Sie Fehler haben!

Recommended Posts