Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
2<br />
Forsøg med faktiske personnumre har vist at denne beskrivelse sikkert ikke er helt<br />
korrekt. I skal imidlertid blot implementere den beskrivelse der gives i Wikipedia.<br />
Dette er faktisk en lidt kompliceret opgave og I skal derfor benytte jer af del-oghersk<br />
problemløsningsstrategien (Divide et Impera efter den romerske militærtaktik.<br />
Et andet navn er stepwise refinement). Den går ud på at inddele et problem i enklere<br />
delproblemer der igen inddeles i enklere delproblemer indtil man når frem til delproblemer<br />
man relativt let kan takle. Hvert delproblem implementeres som en separat<br />
funktion.<br />
Hvis vi vil afgøre om et cpr-<strong>nummer</strong> er korrekt, kan vi søge at løse følgende delproblemer:<br />
1. Er længden lig med 10 (når vi har fjernet ’-’). Brug funktionen len()<br />
2. Er alle karaktererne cifre Brug funktionen isdigit()<br />
3. Er alle månedsangivelser mellem 01 og 12 Lav månedsdelen om til et heltal<br />
ved hjælp af int() og check om den ligger mellem 0 og 12.<br />
<strong>4.</strong> Er alle årsangivelserne mellem 00 og 99<br />
5. Passer den angivne dag med måneden (dvs. at 310269 er forbudt) Hint: lav<br />
lister over måneder med 31, 30 og 28 dage; find den liste hvori cpr’s måned<br />
ligger, læg månedens højeste dato i en variabel (hvis måneden er 10 er en højeste<br />
dato 31), og check at cpr-datoen ikke er større end denne højeste dato. I<br />
kan også bruge en dictionary: {01 : 31, 02 : 28, 03 : 31,…}.<br />
6. Giver ovenstående Kontrol af person<strong>nummer</strong> det rigtige resultat Undersøg<br />
om den pågældende checksum giver resten 0 når man dividerer med 11, dvs.<br />
at checksum % 11 == 0<br />
Nedenstående figur viser hvordan man kan dekomponere en kompleks handling som<br />
’check cpr’ i mindre handlinger som er nemme at gå til. Hver handling implementeres<br />
som en separat funktion.<br />
Man skal kunne taste flere cpr-numre ind. Hvis cpr-<strong>nummer</strong>et er korrekt skal programmet<br />
skrive ’true’ ellers ’false’. Kommandoen ’end’ skal slutte programmet.<br />
type cpr or "end":3112450091<br />
True<br />
type cpr or "end":end<br />
>>><br />
Aflevering: der afleveres et korrekt pyton program.