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

Résolu
SanAntonio94 -  
mamiemando Messages postés 33772 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

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
1) utilise les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
2) ajoute des print() dans ton code, afin de comprendre ce qu'il fait.
1
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882
 
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
SanAntonio94
 
Merci beaucoup ! C'est bien la division qui posait problème !
0
mamiemando Messages postés 33772 Date d'inscription   Statut Modérateur Dernière intervention   7 882 > SanAntonio94
 
De rien, bonne continuation !
0
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
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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