probleme mit sys.stdin

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pythy
User
Beiträge: 7
Registriert: Donnerstag 25. Juli 2013, 12:41

Liebe Python-Gemeinde,

ich möchte aus einem standard in stream einen std out stream erzeugen. Beim in-stream handelt es sich um Ziffern, das Ende des Streams ist durch 'EoF' gekennzeichnet. Nun möchte ich ensprechend der Ziffer eine Anzahl an Fragezeichen ausgeben lassen, Beispiel:

input-stream:
2
3
1

output-stream
??
???
?

Leider habe ich es trotz Recherche nicht hinbekommen. Ich hoffe, ihr könnt mir helfen. Anbei mein Code:

Code: Alles auswählen

import sys

num = sys.stdin.readlines()
# <ctrl-d> EoF sent
for line in sys.stdin:
	list = ["?"]*num
	sys.stdout.write(''.join(list)+"\n")
LG
BlackJack

@pythy: Arbeite mal ein Python-Tutorial durch und mach Dir klar welche Operation welche Werte (und Typen!) als Ergebnis hat. Probiere ein wenig in einer Python-Shell mit Deinen Teillösungen beziehungsweise Ausdrücken, welche Dich Deinem Ziel näher bringen.

Der Quelltext sieht nach wild herumprobieren aus, das ganze ist aber letztendlich so einfach, dass ich nicht sehe wie ich da helfen sollte ohne die Lösung zu verraten. Was, insbesondere bei Hausaufgaben, keine echte Hilfe wäre.

Die Liste brauchst Du übrigens nicht. Das ist unnötig kompliziert, denn Zeichenketten sind auch Sequenzen die den ``*``-Operator verstehen.

Python-Tutorial für Programmieranfänger: Learn Python The Hard Way. Nicht vom Namen irritieren lassen. :-)
pythy
User
Beiträge: 7
Registriert: Donnerstag 25. Juli 2013, 12:41

Hi,

danke für den Link, ich habe einige Kapitel durchgearbeitet und diese ist der (leider nicht funktionierende) status quo:

Code: Alles auswählen

import sys, string

lines = sys.stdin.readlines()

for lineIdx in range(0, len(lines), 1):
	sys.stdout.write("?"*lines[lineIdx] + "\n")
Hast du eine Ahnung was falsch gelaufen ist oder wo ich den Fehler suchen muss?
BlackJack

@pythy: Also erst einmal kann man über die Elemente von Sequenzen wie Listen *direkt* iterieren, ohne den unnötigen Umweg über einen Index. Man kann sogar direkt über das Dateiobjekt iterieren ohne erst alles in eine Liste einlesen zu müssen.

Der Fehler sollte von der Fehlermeldung eigentlich recht deutlich beschrieben werden: ``TypeError: can't multiply sequence by non-int of type 'str'``. Du versuchst die Sequenz '?' mit einem nicht-ganzahligen Wert zu multiplizieren, und zwar hat der Wert den Typ `str`. In der Datei stehen Zeichenketten, die einzelnen Zeilen musst Du also vor dem Multiplizieren in ganze Zahlen umwandeln.
pythy
User
Beiträge: 7
Registriert: Donnerstag 25. Juli 2013, 12:41

Yippie, endlich klappt es!

Hier ist meine Lösung:

Code: Alles auswählen

import sys, string

for line in sys.stdin:
	sys.stdout.write("?"*int(line) + "\n")
Vielen Dank! :D
Antworten