Seite 1 von 1
Nur Bichstaben oder Zahlen als Eingabe zulassen
Verfasst: Freitag 3. Mai 2013, 13:19
von SpyHRO65
Moin Moin,
Ich soll für die Uni ein Programm schreiben, welches überprüft ob die Eingabe eine zulässige kanadische plz darstellt. Die PLZ sehen so aus:
A0B 1C2
D3E 4F5
USW.
Ich weiß jetzt nicht genau wie ich Python zu sagen habe, dass er nur Buchstaben bzw Zahlen für die jeweilige Stelle der PLZ als Eingabe zulassen soll.
Wäre Super, wenn mir da jemand auf die Sprünge helfen könnte

Re: Nur Bichstaben oder Zahlen als Eingabe zulassen
Verfasst: Freitag 3. Mai 2013, 13:25
von mcdwerner
Re: Nur Bichstaben oder Zahlen als Eingabe zulassen
Verfasst: Freitag 3. Mai 2013, 14:06
von krisjugisto
Mach es, wie mcdwerner schon vorschlug, mit regulären Ausdrücken. Aus dem Stand würde ich sagen, du müsstest einfach mal prüfen, ob dieser Ausdruck
Treffer ausspuckt.
Re: Nur Bichstaben oder Zahlen als Eingabe zulassen
Verfasst: Freitag 3. Mai 2013, 14:40
von Sirius3
@krisjugisto: Der reguläre Ausdruck ist natürlich noch zu allgemein.
@SpyHRO65: Aufgaben fallen normalerweise nicht so vom Himmel. Wahrscheinlich hast Du in Deinen Unterlagen schon die nötigen Konstrukte stehen (String-Indizierung, If-Abfragen, usw.).
Was hast Du schon probiert?
Re: Nur Bichstaben oder Zahlen als Eingabe zulassen
Verfasst: Freitag 3. Mai 2013, 14:50
von /me
Sirius3 hat geschrieben:@SpyHRO65: Aufgaben fallen normalerweise nicht so vom Himmel. Wahrscheinlich hast Du in Deinen Unterlagen schon die nötigen Konstrukte stehen (String-Indizierung, If-Abfragen, usw.).
Was hast Du schon probiert?
Es kann gut sein, dass das bisherige Wissen so aussieht, dass die Uni keinen regulären Ausdruck sondern etwas simpleres haben will.
Daher ist die Frage "Was hast du probiert?" (plus die Frage "Welche Python-Sprachelemente darfst du verwenden?") entscheidend.
Re: Nur Bichstaben oder Zahlen als Eingabe zulassen
Verfasst: Freitag 3. Mai 2013, 17:33
von BlackJack
Code: Alles auswählen
from functools import partial
from itertools import izip
from operator import contains, eq as equals
from string import digits, uppercase
is_decimal_digit = partial(contains, set(digits))
is_postal_code_letter = partial(contains, set(uppercase) - set('DFIOQU'))
is_space = partial(equals, ' ')
def is_postal_code(code):
checks = {
'A': is_postal_code_letter,
'0': is_decimal_digit,
' ': is_space,
}
return (
len(code) == 7 and all(checks[p](c) for p, c in izip('A0A 0A0', code))
)

Re: Nur Bichstaben oder Zahlen als Eingabe zulassen
Verfasst: Freitag 3. Mai 2013, 18:15
von Sirius3
@BlackJack: die magic number 7 ist schlecht,
besser:
Code: Alles auswählen
from functools import partial
from itertools import izip_longest
from operator import contains
from string import digits, uppercase, whitespace
POSTAL_CODE_CHECKS = {
'0': partial(contains, set(digits)),
'A': partial(contains, set(uppercase) - set('DFIOQU')),
' ': partial(contains, set(whitespace)),
}
def is_postal_code(code):
return all(POSTAL_CODE_CHECKS[p](c) for p, c in izip_longest('A0A 0A0', code, fillvalue=' '))
Re: Nur Bichstaben oder Zahlen als Eingabe zulassen
Verfasst: Freitag 3. Mai 2013, 18:28
von BlackJack
@Sirius3: Ich wollte dem OP halt nicht gleich die perfekte Lösung liefern.
Edit: Wobei `string.whitespace` auch Tabs und Zeilenumbruch/-ende enthält. Da würde ich bei ' ' bleiben.