Es. 10. 15/05

Da aptiva.

Silvia propone questa soluzione.

def numdigit(num):
    
    if abs(num)/10 == 0 :
        return 1
    
    numApp = numdigit(num/10) + 1
    return numApp


if __name__=="__main__":
    num0 = input("inserisci un numero intero: ")
    print "Il numero di cifre decimali e': " + str(numdigit(num0))

Che funziona in Python2... ma non in Python3 (e non basta inserire int() per l'input o le parentesi della print, ... a proposito: ne mancava una). Infatti Python2 e Python3 hanno una differenza per l'operatore di divisione /. Per Python2 se si dividono due interi la divisione e' intera, per Python3 / restituisce sempre un reale. Quindi il primo commento e' di cambiare / con //:

def numdigit(num):
    
    if abs(num)//10 == 0 :
        return 1
    
    numApp = numdigit(num//10) + 1
    return numApp


if __name__=="__main__":
    num0 = int(input("inserisci un numero intero: "))
    print("Il numero di cifre decimali e': " + str(numdigit(num0)))

Questo funziona sia in Python2 cha in Python3.

Occorre far notare la gestione di alcuni casi particolari:

  • lo zero: si poteva usare come caso base, se il numero e' 0 occorrono zero caratteri, ma sarebbe stato sbagliato. Avrebbe funzionato per tutti i numeri tranne lo zero stesso (che ha necessita' di un carattere per poter essere rappresentato).
  • numeri negativi: non e' stato contato il carattere per il segno - ma c'e' stata la preoccupazione di gestire il caso dei numeri da -1 a -9 che per la regola della divisione intera divisi per 10 avrebbero dato -1 e quindi diversi da 0 (sarebbe saltato il caso base della ricorsione).

Ecco il codice ottimizzato (python3):

def numdigit(num):
  def rnumdigit(num):
    return 0 if num==0 else 1+rnumdigit(num//10)
  if num>0:
    return rnumdigit(num)
  else:
    return 1+rnumdigit(-num) # one char is for "-" sign or 0

if __name__=="__main__":
    num0 = int(input("inserisci un numero intero: "))
    print("Il numero di cifre decimali e':",numdigit(num0))
Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti