J'essaie d'écrire une fonction qui renvoie le nombre de 0 à la fin d'une chaîne ou d'un entier. Voici ce que j'essaie et il ne renvoie pas les valeurs correctes.

def trailing_zeros(longint):
    manipulandum = str(longint)
    x = 0
    i = 1
    for ch in manipulandum:
        if manipulandum[-i] == '0':
            x += x
            i += 1
        else:
            return x
14
Friedrich Nietzsche 21 déc. 2011 à 20:50

5 réponses

Meilleure réponse

Peut-être que vous pouvez essayer de le faire. Cela peut être plus facile que de compter chaque «0» final

def trailing_zeros(longint):
    manipulandum = str(longint)
    return len(manipulandum)-len(manipulandum.rstrip('0'))
13
Abhijit 21 déc. 2011 à 16:57

Vous pourriez simplement:

  1. Prenez la longueur de la valeur de chaîne de ce que vous vérifiez
  2. Couper les zéros de fin d'une copie de la chaîne
  3. Reprenez la longueur de la chaîne coupée
  4. Soustrayez la nouvelle longueur de l'ancienne longueur pour obtenir le nombre de zéros à la fin.
1
Sheridan Bulger 21 déc. 2011 à 16:54

J'ai trouvé deux façons d'y parvenir, l'une est déjà mentionnée ci-dessus et l'autre est presque similaire:

manipulandum.count('0') - manipulandum.rstrip('0').count('0')

Mais quand même, je cherche une meilleure réponse.

0
Shadow Wizard is Ear For You 26 févr. 2013 à 10:44

La question demande de compter les zéros de fin dans une chaîne ou entier . Pour une chaîne, len(s) - len(s.rstrip('0')) est très bien. Mais pour un entier, vous ne voulez probablement pas le convertir d'abord en chaîne. Dans ce cas, utilisez la récursivité:

def trailing_zeros(longint):
    assert(longint)
    return ~longint % 2 and trailing_zeros(longint/2) + 1
0
personal_cloud 15 nov. 2019 à 22:07

Pour les chaînes, il est probablement le plus facile à utiliser rstrip() :

In [2]: s = '23989800000'

In [3]: len(s) - len(s.rstrip('0'))
Out[3]: 5
31
NPE 21 déc. 2011 à 16:53
8593355