python hadze podivnu vynimku

Sekcia: Programovanie 28.11.2008 | 20:19
Avatar Matej Krajčovič Ubuntu 8.10  Používateľ
dobry den.
moj maly skriptik hadze podivnu vynimku, pri ktorej ale nechapem ako vznikla.

Zdrojak:
def pocet_cifier(cislo, pomocna_premenna = 0):
        c = cislo / 10
        if c > 0 and c < 1:
                return 1
        if c >= 1 and c < 10:
                return pomocna_premenna + 2
        if c >= 10:
                return pocet_cifier(c, pomocna_premenna + 1)

i = 0
docasny_vysledok = 0
print pocet_cifier(20)
print pocet_cifier(123)

while 1:
        i += 1
        docasny_vysledok += pocet_cifier(i)
        if docasny_vysledok == 3609:
                break
        else:
                continue

print "Hello world!"
print i
print "To funguje. :)"

Vystup:
2
3
Traceback (most recent call last):
  File "program.py", line 17, in <module>
    docasny_vysledok += pocet_cifier(i)
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'

ako vidite, ked funkciu zavolam samostatnu a vypisem vysledok, ale ked s vysledkom pocitam akosi to nejde. mimochodom, je to riesenie prveho prikladu z korespodencneho seminara gjh (link). dakujem za kazdu radu.
You are registered as user #457083 with the Linux Counter.<br/> Given enough eyeballs, all bugs are shallow.<br/>
    • Re: python hadze podivnu vynimku 28.11.2008 | 20:36
      Avatar Tomáš Srnka Barz čo, už asi všetko  Administrátor
      To take mame aj na skole? :-) Co sa clovek nedozvie :-).

      k teme, chybu mas v tej funkcii, co ak ani jedna podmienka neplati? potom ti funkcia nevrati ziadnu hodnotu (+ tie podmienky su nejak divne)

      Spravne by malo byt nieco ako:
      def pocet_cifier(cislo, out=0):
      	if cislo > 0:
      	  return pocet_cifier(cislo/10, out+1)
      	else:
      	  return out
      


      Dlho som robil linuxos.sk, neskôr založil vpsFree.cz, posledných pár rokov ako tech. riaditeľ vo Websupporte
      • Re: python hadze podivnu vynimku 28.11.2008 | 20:59
        Avatar Matej Krajčovič Ubuntu 8.10  Používateľ
        dakujem funguje to. iba nechapem tej podmienke. desatina kazdeho kladneho cisla je vacsia ako 0 tak vzdy bude platit ta podmienka.
        You are registered as user #457083 with the Linux Counter.<br/> Given enough eyeballs, all bugs are shallow.<br/>
        • Re: python hadze podivnu vynimku 28.11.2008 | 21:01
          Avatar Tomáš Srnka Barz čo, už asi všetko  Administrátor
          pozor, to je integerove delenie, ze 2/3 = 0 nie, 0.66666
          Dlho som robil linuxos.sk, neskôr založil vpsFree.cz, posledných pár rokov ako tech. riaditeľ vo Websupporte
          • Re: python hadze podivnu vynimku 28.11.2008 | 21:10
            Avatar Matej Krajčovič Ubuntu 8.10  Používateľ
            teda zaokruhnelie nadol?
            You are registered as user #457083 with the Linux Counter.<br/> Given enough eyeballs, all bugs are shallow.<br/>
            • Re: python hadze podivnu vynimku 28.11.2008 | 22:41
              Avatar Tomáš Srnka Barz čo, už asi všetko  Administrátor
              nie, ono to usekne desatinnu cast, ak chces presne delenie pouzi "./" .

              Vyskusaj si to:
              print 5/2
              print 5./2
              Dlho som robil linuxos.sk, neskôr založil vpsFree.cz, posledných pár rokov ako tech. riaditeľ vo Websupporte
              • Re: python hadze podivnu vynimku 29.11.2008 | 10:22
                Avatar Matej Krajčovič Ubuntu 8.10  Používateľ
                dakujem.
                You are registered as user #457083 with the Linux Counter.<br/> Given enough eyeballs, all bugs are shallow.<br/>