Der Hintergrund des Problems macht überraschend viel Spaß beim Lesen.
Es ist schon eine Weile her, dass ich vom Wettbewerb begeistert war, deshalb habe ich in den letzten Tagen einfache Probleme als Rehabilitation gelöst. Da dies eine gute Idee ist, habe ich die Umgebung von C ++ + Emacs, die ich in der Vergangenheit verwendet habe, in Python + PyCharm geändert.
Zu diesem Zeitpunkt habe ich eine Vorlage erstellt, die das Hinzufügen von Tests (so wie sie ist) vereinfacht, und ich werde sie hier veröffentlichen. Unten finden Sie eine Beschreibung der erstellten Vorlage.
Zuallererst ist es die eiserne Regel des Wettkampfprofis, die Randbedingungen zu überprüfen.
Dieses Mal werden wir Codeforces unter den vielen wettbewerbsfähigen Pro-Sites ansprechen. Codeforces bietet folgende Funktionen:
Da nur wenige Testfälle verfügbar sind, ist der Schlüssel zunächst, wie einfach es ist, eigene Tests hinzuzufügen. (Umgekehrt besteht wenig Bedarf, Testfälle automatisch aus Problemstellungen zu generieren.)
Das wichtigste Merkmal ist, dass es zu diesem Zeitpunkt zu einem Engpass wird. Beim Austausch von Funktionsargumenten und Rückgabewerten (Wettbewerbe wie TopCoder) können Sie Unit-Tests normal schreiben, sodass Sie problemlos IDE-Unterstützung erhalten. Die Standardeingabe / -ausgabe wird jedoch nicht so stark unterstützt, und es scheint selbst mit jUnit schwierig zu sein, sie zu testen. Daher ist es notwendig, eine etwas mühsame Methode anzuwenden.
Wenn Sie die Datei so wie sie ist einreichen, wird es auch einfacher, daher möchte ich sie so gestalten, dass sie so wie sie ist eingereicht werden kann.
In die Form einpassen.
Die Einführung ist lang geworden, aber ich werde die Vorlage, die ich gemacht habe, hier einfügen. Es gibt 2 Dateien, Eine ist eine Datei, in der Sie den Code schreiben und so wie er ist senden können. Die andere ist eine Datei, die den Test beschreibt.
Zuerst die Datei, die den Code schreibt. Schau nicht hin! Nach (CV: Umes) ist es ein Teil, den Sie beim Lösen des Problems nicht sehen müssen.
main.py
# -*- coding: utf-8 -*-
import sys
#Erhöhen Sie den erforderlichen Import
class Solver(object):
def run(self):
###Listen Sie die Antwort hier auf###
####################################
#Schau nicht von hier aus!
###Listen Sie die Bibliothek hier auf###
if __name__ == '__main__':
Solver().run()
Als nächstes die Datei, um den Test zu schreiben.
test_solver.py
# -*- coding: utf-8 -*-
from unittest import TestCase
data = [
(
"""
Eingabe 1
""".strip()
,
"""
Antwort 1
""".strip()
),
(
"""
Eingabe 2
""".strip()
,
"""
Antwort 2
""".strip()
),
]
########################################
#Schau nicht von hier aus!
class TestSolver(TestCase):
def test_run(self):
import os
import sys
from StringIO import StringIO
import main
for i, testdata in enumerate(data):
print(str(i) + " test...")
saved_stdout = sys.stdout
try:
with open("temp_data.txt", "w+") as temp:
temp.write(testdata[0])
fd = os.open("temp_data.txt", os.O_RDONLY)
os.dup2(fd, sys.stdin.fileno())
out = StringIO()
sys.stdout = out
main.Solver().run()
output = out.getvalue().strip()
self.assertEquals(output, testdata[1])
finally:
sys.stdout = saved_stdout
Durch Ausführen von TestSolver.test_run () in test_solver.py wird die am Anfang der Datei definierte Testfallgruppe ausgeführt. In dieser Funktion Empfängt Standardeingaben aus der Datei Leiten Sie die Standardausgabe zu Variablen um tun. Auf diese Weise können Sie den Standardeingang durch den Standardausgang ersetzen.
In den Testfällen werden hier Dokumente verwendet, sodass Sie sie einfach durch Kopieren hinzufügen können. Es ist kein Mäusetraining erforderlich.
Muss die Standardeingabe nicht eine Datei durchlaufen? Ich dachte, aber aus irgendeinem Grund konnte ich es nicht tun, also gab ich auf (eine detaillierte Person plz). Außerdem schreibe ich absichtlich den Ort, an den ich mit tempfile schreiben könnte, in die eigentliche Datei, aber Windows? In einem kleineren Betriebssystem wie z. B. werde ich wütend, weil ich keine Berechtigung zum Lesen von tempfile habe. Es ist mühsam, es zu vermeiden ... Ich konnte es nicht tun, also gab ich auf (eine detaillierte Person plz).
Fast wie Sie sehen können. Grundsätzlich müssen Sie nur den Bereich über der Datei bearbeiten.
Die Vorlage ist nur eine Datei, sodass Sie sie in Kombination mit Ihrem bevorzugten Editor verwenden können. PyCharm ist einfach und nett als komfortabler Codierer. Es gibt auch eine automatische Vervollständigung, und die Ausführung ist mit Tastenkombinationen einfach. Natürlich ist es auch eine gute Idee, es mit Emacs oder Vim zu kombinieren und mit einem vertrauten Editor zu kämpfen. Es hat keinen Sinn, Emacs an erster Stelle zu haben.
Dies macht es noch bequemer! Wenn Sie das Wissen haben, kommentieren Sie bitte.
Recommended Posts