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! !!
Im Wettbewerbsprogrammierstandard konzentriert sich die Erklärung auf Ganzzahlen, aber ich denke, dass sich die Grundstruktur nicht ändert, ob Sie Ganzzahlen oder Zeichenfolgen erhalten.
Verhalten von input ()
Standardeingang empfangen (1 Zeile)
Ein Zeichen (Spalte)
Eine Ganzzahl mit einer Eingabe
Die Eingabe besteht aus mehreren Ganzzahlen
Standardeingabe empfangen (mehrere Zeilen)
Eine Ganzzahl für jede Zeile (Anzahl der angegebenen Zeilen)
Mehrere Ganzzahlen in jeder Zeile (Anzahl der angegebenen Zeilen und Spalten)
Eine Ganzzahl für jede Zeile (keine Anzahl von Zeilen angegeben)
Was ich über Standardeingabe schreiben möchte
Am Ende
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
Lesen Sie 1 Zeile </ b> von der Eingabe
In Zeichenfolge </ b> konvertieren und zurückgeben
Ich denke es gibt zwei. Schauen wir uns vor diesem Hintergrund einen tatsächlichen Anwendungsfall an.
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
.
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.
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
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.
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.
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.
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.
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
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.
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).
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
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.
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]
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.
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)
Es war unerwartet lange, als ich es schrieb. Wie ich zu Beginn schrieb, lassen Sie mich bitte wissen, wenn Sie Fehler haben!
Recommended Posts