Compter le nombre de zéro à la fin d'un nombre

Résolu
SanAntonio94 -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je dois calculer le nombre de zéro à a fin d'une valeur issue de la fonction factorielle. Cependant j'ai une erreur pour certaine valeur, ce que je n'arrive pas à comprendre. Par exemple, pour 23!, il compte 1 zéro alors qu'il y en a 4.
Voici le programme en question:

def facto(n):
  if n==0:
    return 1
  else:
    return n*facto(n-1)

def zero(n):
 nbre=facto(n)
 zero=0
 while nbre!=0:
   if nbre%10==0:
     zero=zero+1
   nbre=nbre/10
 return(zero)


Merci d'avance.
Configuration: Windows / Chrome 89.0.4389.114

3 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Comme le dit yg_be, l'opérateur
    /
    ne calcule pas une division entière en python3 (contrairement à python2), donc je suppose que tu voulais utiliser l'opérateur
    //
    .

    Note que la fonction factorielle est disponible de base en python :

    from math import factorial
    print(factorial(23))


    Une approche peu élégante mais qui marche consiste à transformer le résultat de
    facto(n)
    sous forme de chaine, de récupérer sa longueur, puis de supprimer tous les 0 à droite de cette chaîne (e.g. avec la méthode
    rstrip
    )

    s = str(facto(23))
    print(len(s) - len(s.rstrip("0")))


    Bonne chance
    1
    1. SanAntonio94
       
      Merci beaucoup ! C'est bien la division qui posait problème !
      0
      1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940 > SanAntonio94
         
        De rien, bonne continuation !
        0
  2. SanAntonio94
     
    J'ai trouvé une piste et est modifié en fonction mais toujours la même erreur à 23...


    def facto(n):
    if n==0:
    return 1
    else:
    return n*facto(n-1)

    def zero(n):
    nbre=facto(n)
    zero=0
    while nbre>0:
    if nbre%10==0:
    zero=zero+1
    nbre=nbre/10
    else:
    break
    return(zero)
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      cela s'éméliore, en effet.
      as-tu ajouté des print() pour comprendre ce qui se passait?
      connais-tu l'opérateur de division entière en python?
      0