Introduktionskurs i programmering - Python

Här diskuteras programmering och utveckling
Användarvisningsbild
upnorth
Inlägg: 7100
Blev medlem: 14 jun 2007, 19:43
OS: Linux Mint
Ort: Oslo

Introduktionskurs i programmering - Python

Inlägg 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.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: Introduktionskurs i programmering - Python

Inlägg av Lars »

Hur påverkar sista modulo-operatorn beräkningen?
Användarvisningsbild
upnorth
Inlägg: 7100
Blev medlem: 14 jun 2007, 19:43
OS: Linux Mint
Ort: Oslo

SV: Introduktionskurs i programmering - Python

Inlägg 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 ;)
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

SV: Introduktionskurs i programmering - Python

Inlägg 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
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
upnorth
Inlägg: 7100
Blev medlem: 14 jun 2007, 19:43
OS: Linux Mint
Ort: Oslo

SV: Introduktionskurs i programmering - Python

Inlägg 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/
Skriv svar

Återgå till "Programmering och webbdesign"