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

Résolu/Fermé
SanAntonio94 - Modifié le 6 avril 2021 à 12:57
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 6 avril 2021 à 15:08
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
A voir également:

3 réponses

yg_be Messages postés 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025 Ambassadeur 1 557
6 avril 2021 à 10:52
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 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
6 avril 2021 à 13:03
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
Merci beaucoup ! C'est bien la division qui posait problème !
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812 > SanAntonio94
6 avril 2021 à 15:08
De rien, bonne continuation !
0
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 23416 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 3 janvier 2025 1 557
6 avril 2021 à 12:20
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