im echten Leben habe ich über 100 Fragebögen auf denen je 30 Fragen mit Antworten zwischen 0 und 4 beantwortet wurden. Den ganzen Kram muss ich jetzt in den Rechner eingeben. Mein Plan ist, einfach über raw_input() die Antworten als Folge von 30 Ziffern einzulesen. Eine valide Eingabe wäre etwa
'000102004030341020102201011240'
(erste drei Fragen wurden mit '0' beantwortet, die vierte mit '1' usw.)
bevor ich das verarbeite muss ich prüfen, ob wirklich 30 Ziffern eingegegen wurden und ob die alle zwischen 0 und 4 liegen. Die nachfolgende Auswertung soll ja nicht scheitern, nur weil man versehentlich auf eine Buchstabentaste gekommen ist oder bei der Zifferneingabe ein Shift gedrückt war. Zur Zeit mache ich das so:
Code: Alles auswählen
def teste_itemstring(self, itemstring):
"Testet einen Itemstring auf syntaktische Korrektheit."
itemstring=itemstring.strip()
if len(itemstring)==30 and itemstring.isdigit():
for i in xrange(0,30):
if not (0 <= int(itemstring[i]) <= 4):
return(False)
return(True)
return(False)
[0,0,0,1,0,2,...] zu.
Frage 1: Kann man diese Überprüfung vielleicht eleganter/pythonischer als mit dieser if-for-if-Konstruktion machen, beispielsweise mit Regulären Ausdrücken oder so? (Performanz spielt keine Rolle, Lesbarkeit und Schönheit schon)
Frage 2: Kann ich die Prüfung und Umwandlung in eine Liste etwas benutzerfreundlicher machen? Das Erfassen der Bögen wird eine Sch...arbeit und z. B. Zeile 3 dient dazu, dass ein Itemstring auch dann verstanden wird, wenn der User versehentlich ein Space am Anfang oder Ende gedrückt hat. Ich würde ihm gerne auch mehr erlauben. Cool wäre, wenn außer
(a) '000102004030341020100001011240'
auch
(b) '0001020040 3034102010 0001011240'
oder
(c) '0001020040.3034102010.0001011240'
oder sogar auch
(d) '(3*0)1020040303410201(4*0)1011240'
korrekt gelesen würden.
Vielen Dank,
Bernhard