Keine Ideen um das Gelernte umzusetzen
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
In Deinem Beispiel stand die "99" am Schluss der Eingabe. Das sollte - so weit ich das verstanden habe - gar nicht möglich sein.mcdaniels hat geschrieben:@hyperion: Hm, bekomme exakt diese (deine) Ausgabe.
Unabhängig davon benötigt man einfach keine Liste - ich kann ehrlich gesagt gar nicht verstehen, was daran so kompliziert zu verstehen ist. Das Verwenden einer Liste ist doch viel "schwieriger"...
Edit: Aha... also war das Beispiel vorhin nicht korrekt!?!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
So, nachdem ich mit meinen Edits sonst Chaos verursache, fasse ich nochmal zusammen
Mein "Programm" kreiert folgende Ausgabe:
Das Beispiel in dem beim Input die 99 nach 42 auch noch eingegeben werden kann, stammt von der Aufgabenstellung http://www.spoj.pl/problems/TEST/
Mein "Programm" kreiert folgende Ausgabe:
Code: Alles auswählen
Input:
1
2
88
42
Output:
1
2
88
@mcdaniels: Dein Programm gibt auch ``Input:`` und die Eingabe aus? Das ist natürlich falsch.
Du sollst nicht "Input" und "Output" schreiben... Input ist das, was in *exakt dieser Form* über STDIN reinkommt. Dabei kannst du STDIN wie eine Datei behandeln (ist ja schließlich auch ein Dateiobjekt in Python). Und das was unter Output steht (also ab der Zeile nach dem Doppelpunkt), das ist die erwartete Ausgabe.
Da du's anscheinend wirklich nicht verstehst, hier eine Loesung:
Und hier die interaktive Session damit:
Code: Alles auswählen
while True:
try:
v = int(raw_input())
except ValueError:
pass
else:
if v == 42:
break
print v
Code: Alles auswählen
Python 2.7 (r27:82500, Mar 7 2011, 20:44:27)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Welcome to rlcompleter2 0.98
for nice experiences hit <tab> multiple times
>>> while True:
... try:
... v = int(raw_input())
... except ValueError:
... pass
... else:
... if v == 42:
... break
... print v
...
10
10
20
20
30
30
50
50
oeusath
42
>>>
@deets: Danke für das Beispiel. Also ich hab das so verstanden, dass solange Zahlen per Input entgegen genommen werden sollen bis 42 eingegeben wird. Bei 42 wird die Eingabe angehalten und es werden alle eingegebenen Zahlen ausgegeben.
@snafu: Sprichst du eventuell von sys.stdin oder meinst du damit die einfache eingabe input() über die Konsole?
LG und Danke!
Daniel
@snafu: Sprichst du eventuell von sys.stdin oder meinst du damit die einfache eingabe input() über die Konsole?
LG und Danke!
Daniel
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du kannst Zahlen natürlich auch erst einmal "puffern", z.B. in einer Liste, wie Du es getan hast. Das kann bei sehr großen Eingaben aber problematisch werden... insofern sehe ich da nicht den Nutzen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Es scheint auch, da dies ja maschinell bewertet wird, keinen wirklichen Spielraum zu geben, vermute ich zumindest. Vielleicht interpretiere ich die Aufgabe ja noch immer falsch. Die Eingaben müssen - meinem Verständnis nach - irgendwo zwischengepuffert werden, wenn sie erst nachträglich ausgegeben werden sollen, oder?
Meine Guete. Langsam wird's zum verzweifeln.
Wo steht etwas von puffern?!? Nirgendwo. Aber es ist sehr gut moeglich, dass die automatische Testroutine prueft, ob nach eingabe EINER Zahl auch diese sofort rauskommt. Also ist puffern - da nicht gefragt - auch zu unterlassen, und damit ist mit einem mal auch das Problem geloest.
Wo steht etwas von puffern?!? Nirgendwo. Aber es ist sehr gut moeglich, dass die automatische Testroutine prueft, ob nach eingabe EINER Zahl auch diese sofort rauskommt. Also ist puffern - da nicht gefragt - auch zu unterlassen, und damit ist mit einem mal auch das Problem geloest.
@mcdaniels: Wenn die Zahlen nachträglich ausgegeben werden sollten, *dann* müsste man sie puffern. Das sollen sie doch aber gar nicht.
Ja, aber sie sollen ja gar nicht nachträglich ausgegeben werden. Es ist egal. Hauptsache nach Beendigung des Programms steht die gewünschte Ausgabe auf dem Bildschirm. Ich glaube, du gehst immer noch davon aus, dass zwischendrin eine Art Eingabezeile für die nächste Zahl steht. Dies ist aber nicht der Fall. Es kann "still" von `sys.stdin` gelesen werden und (nach meinem Verständnis) zu einem beliebigen Zeitpunkt eine (Teil-)Ausgabe gemacht werden. Es empfiehlt sich daher, die Zahl schon auszugeben, sobald nach dem Test in der Schleife klar ist, dass eine Ausgabe der Zahl erlaubt bzw gefordert ist.
Zuletzt geändert von snafu am Donnerstag 12. April 2012, 14:05, insgesamt 1-mal geändert.
@mcdaniels
Nachtrag: auch "nachtraegliche Ausgabe" steht da nirgends. Eingabe ist Zahl != 42: dann ausgabe. Nach Eingabe von 42 nix mehr machen. Das ist deine Aufgabe.
Man koennte hoechstens noch darueber streiten, ob das Programm danach sich beenden darf, oder weiter Eingaben entgegennimmt, bis zum Sankt Nimmerleins Tag. Aber da das ziemlich sinnlos waere, habe ich das auch nicht so implementiert.
Nachtrag: auch "nachtraegliche Ausgabe" steht da nirgends. Eingabe ist Zahl != 42: dann ausgabe. Nach Eingabe von 42 nix mehr machen. Das ist deine Aufgabe.
Man koennte hoechstens noch darueber streiten, ob das Programm danach sich beenden darf, oder weiter Eingaben entgegennimmt, bis zum Sankt Nimmerleins Tag. Aber da das ziemlich sinnlos waere, habe ich das auch nicht so implementiert.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Die maschinelle Bewertung eines "Puffers" dürfte eher schwierig sein... da wird sicherlich einfach die Ausgabe analysiert. Daher darf da ja auch nichts anderes ausgegeben werden, als die gewünschten Zahlen. Ich kann aus der Aufgabe auch nicht herauslesen, dass man irgend etwas puffern müsste... zugegeben finde ich das Beispiel auch ein wenig irreführend, dass bei Input nach der 42 noch eine Zahl auftaucht...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@Hyperion
Das ist aber sinnvoll um zu belegen, dass nach der 42 keine Ausgabe mehr erfolgt. Wuerde ich als Testcase auch so schreiben.
Das ist aber sinnvoll um zu belegen, dass nach der 42 keine Ausgabe mehr erfolgt. Wuerde ich als Testcase auch so schreiben.
@deets
Btw. verzweifeln soll wegen mir hier niemand. Ich überlege manchmal wirklich, ob ich es wieder sein lassen sollte, da ich mich oft extrem doof anstelle...
@snafu:
Ich wäre allerdings nicht im Traum darauf gekommen von sys.stdin einzulesen und ja ich hab da bei meiner Lösung ein input() im "Spiel".
Vielen Dank
LG
Daniel
Ok, dann ists ne klare Fehlinterpretation von mir. Das "Example", welches hier auf SPOJ gezeigt wird, halte ich dann jedoch auch für irreführend.Also ist puffern - da nicht gefragt - auch zu unterlassen
Btw. verzweifeln soll wegen mir hier niemand. Ich überlege manchmal wirklich, ob ich es wieder sein lassen sollte, da ich mich oft extrem doof anstelle...
@snafu:
Ich wäre allerdings nicht im Traum darauf gekommen von sys.stdin einzulesen und ja ich hab da bei meiner Lösung ein input() im "Spiel".
Vielen Dank
LG
Daniel
Zuletzt geändert von mcdaniels am Donnerstag 12. April 2012, 14:10, insgesamt 1-mal geändert.
Ich poste jetzt einfach meine Lösung, da die von deets ja auch schon reingestellt wurde:
Das war's. Gesonderte Prüfungen sind nicht nötig, da die Aufgabenstellung gültige Eingaben garantiert.
Code: Alles auswählen
import sys
for line in sys.stdin:
number = int(line)
if number == 42:
break
print number
Der Satzteil "rewrite small numbers from input to output" ist IMHO schon relativ deutlich ausgedrückt worden. Auch im Hinblick auf Brute Forcing als Kontext macht es Sinn, eher etwas dateiartiges zu haben als spielemäßig Zahlen abzufragen.mcdaniels hat geschrieben:Ich wäre allerdings nicht im Traum darauf gekommen von sys.stdin einzulesen und ja ich hab da bei meiner Lösung ein input() im "Spiel".