On 14 May 2015, at 23:38, Jochem Oosterveen <joc...@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. _______________________________________________ Python-nl mailing list Python-nl@python.org https://mail.python.org/mailman/listinfo/python-nl