Portál AbcLinuxu, 10. května 2025 18:59
soucet = 0
for i in str(cislo): soucet += int(i)
Alternativně bych si dokázal představit dělat modulo 10 a dělení 10 tak dlouho, dokud nezbyde 0.
str = cisloje velmi destruktivní, protože str je v Pythonu jméno třídy (typu) řetězce. Není problém do něj přiřadit něco jiného, ale pokud to neděláš úmyslně, začnou se dít pro tebe dost překvapivé věci prakticky ve všem, co se nějak týká řetězců. Asi tam mělo být
cislo = str(cislo)Jinak já bych člověku, který přijde s řešením pomocí převodu na řetězec, řekl: bezva, a teď jak to uděláte pro zápis čísla ve čtrnátctkové (například) soustavě -- na což už podobné triky nefungují. Je zapotřebí si uvědomit, že poslední cifru získáš
cifra = cislo % základa následně ji odřízneš
cislo = cislo // základA tohle je zapotřebí dělat, dokud není číslo nula.
reduce(lambda x,y: x+y, [int(i) for i in "1234"])Ale neco mi rika ze ti nekdo neuveri ze jsi to vymyslel sam
n = 1485 reduce(lambda x,y: int(x)+int(y), str(n))Nejvyšší číslice:
n = 1485 reduce(lambda x,y: max(int(x), int(y)), str(n))Pro mnohaciferné případy 1x
for
a řešit najednou.
csum = lambda x: x % 10 + csum(x//10) if x else 0 csum(1485)
csum :: Int -> Int csum 0 = 0 csum x = mod x 10 + csum(div x 10)akorát v Pythonu je zapotřebí k ukončení tail rekurze použít if; v Haskellu to elegantně řeší pattern matching.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.