[python-nl] python27, windows 8.1

Wichert Akkerman wichert at wiggy.net
Fri May 15 08:24:20 CEST 2015


On 14 May 2015, at 23:38, Jochem Oosterveen <jochem at oosterveen.net> wrote:
> Verder valt op dat je eerst van alles checkt voor iets te doen. Iets meer ‘pythonic’ is om iets gewoon te proberen en fouten dan af te handelen. Ik heb het geheel een klein beetje aangepast waarmee de conversie van de variabele getal naar een int wordt gedaan in een try/except block. Als dat niet lukt krijg je een ValueError terug, die vang ik hier af in de except. Gelijk ook de check dat letters geen digits zijn hierbij gestoken met een assert, die een AssertionError opwerpt als dat niet het geval is. Je kan dan toe met één keer die foutafhandeling schrijven. 
> 
> while 1:
>     invoer = raw_input("Geef postcode in: ")
>     if invoer == ("stop"):
>         break
>     lengte = len(invoer)
>     if lengte == 6:
>         cijfers = invoer[:4]
>         letters = invoer[-2:]
>         try:
>             getal = int(cijfers)
>             assert not letters.isdigit()
>         except (ValueError, AssertionError):
>             print("Verkeerde invoer")
>             continue
>         print getal
>         print letters
>         print ("uw postcode is:") + invoer
>     else:
>         print("Verkeerde invoer")
> print ("Dank u wel!”)

Regular expressions zijn helemaal ideaal hiervoor aangezien je daarmee al deze checks in één keer kan doen:

while True:
    invoer = raw_input("Geef postcode in: ")
    if invoer == "stop":
        break
    m = re.match("\s*(\d{4})\s*([A-Z]{2})\s*$", invoer.upper())
    if m is None:
        print("Verkeerde invoer")
    else:
        print("Uw postcode is: %s %s" % (m.group(1), m.group(2)))
print("Dank u wel!")

Bijkomend voordeel van deze versie is dat je ook spaties tussen de cijfers en de letters mag zetten. Ik geef best toe dat zo een regular expression er in eerste instantie wat magisch uit ziet, maar als je eenmaal door hebt hoe ze werken zijn ze ideaal.

Gr,
Wichert.



More information about the Python-nl mailing list