Sida 1 av 1

Introduktionskurs i programmering - Python

Postat: 12 okt 2007, 13:42
av upnorth
Jo, det är så här att jag läser den här kursen och om nu går längst ner på sidan finns några labbar.

Jag jobbar för närvarande på Lab 2 (ja, jag ligger efter...) och har fastnat på följande uppgift:
Skriv en funktion som beräknar tvärsumman av ett naturligt tal (funktionen ska ta ett heltal som argument). Med tvärsumman menas summan av alla siffror i talet i talbasen 10 (alltså så som vi vanligtvis skriver talet). Problemet ska lösas med en rekursiv funktion.

Ledning: ett naturligt tal kan delas upp i en sista siffra och det tal man får om man "tar bort" den sista siffran
(här är operatorerna % och / lämpliga att använda). Om det inte blir något kvar när sista siffran tagits bort är
lösningen enkel, i annat fall har man fått ett nytt tal vars tvärsumma är en del av det sökta svaret.
Det här är vad jag lyckats få till hittills:

Kod: Markera allt

def xsum(n):
    if n>0:
        n=n%10+xsum(n/10)%10
    return n
Problemet är att den här funktionen har ganska kraftiga begränsningar i fråga om vilka tal den kan beräkna:

n = 1234 ger: n = 123 +4 > 12 +7 > 1 +9 > 10, vilket ju är 1 +2 +3 +4.

Men när en delsumma överstiger 10 så påverkas ju även nästa siffra i ledet, vilket gör att uträkningen inte fungerar.

Normalt sett brukar jag räkna ut sådant här med loopar, men nu är kravet en rekursiv funktion med endast en variabel.

SV: Introduktionskurs i programmering - Python

Postat: 12 okt 2007, 14:18
av Lars
Hur påverkar sista modulo-operatorn beräkningen?

SV: Introduktionskurs i programmering - Python

Postat: 12 okt 2007, 14:29
av upnorth
Lars skrev: Hur påverkar sista modulo-operatorn beräkningen?
Den gör "på distans" den här beräkningen: return n%10

Men den påverkar inte den sista return n som därför skriver ut resultatet av alla beräkningar på n... tror jag iallafall ;)

SV: Introduktionskurs i programmering - Python

Postat: 13 okt 2007, 16:45
av Smygis
upnorth skrev:
Lars skrev: Hur påverkar sista modulo-operatorn beräkningen?
Den gör "på distans" den här beräkningen: return n%10

Men den påverkar inte den sista return n som därför skriver ut resultatet av alla beräkningar på n... tror jag iallafall ;)
Rättelse, Den sista modulon fuckar upp allt.


>>> def xsum(n):
...    if n > 0:
...        n = n % 10 + xsum(n/10)
...    return n
...
>>> xsum(54)
9
>>> xsum(1233)
9
>>> xsum(1365821576)
44
>>> sum([int(i) for i in "1365821576"])
44

SV: Introduktionskurs i programmering - Python

Postat: 13 okt 2007, 16:53
av upnorth
Seriöst, detta ska vara en uppgift för nybörjare ??? :o
Hur ska jag gå till väga?

Här är kurshemsidan för info och labbar (längst ner): http://www.sm.luth.se/csee/courses/smd/180/