nombres d'armstrong python
nombres d'armstrong python
la question est d ecrire une fct estarmstrong(n) qui revient True si n est un nbr d'armstrong et False sinon (on rappelle qu 'un nbr est dit d'armstrong s il est egal a la somme des cubes des chiffres qui le composent)
voila le script que j ai fait mais ca n a pas marché
def estarmstrong(n):
a=str(n)
S=0
for i in range(len(a)):
S+=(int(a)**3
if S==n:
return True
else:
return False
et merci beaucoup pour votre aide
voila le script que j ai fait mais ca n a pas marché
def estarmstrong(n):
a=str(n)
S=0
for i in range(len(a)):
S+=(int(a)**3
if S==n:
return True
else:
return False
et merci beaucoup pour votre aide
Re: nombres d'armstrong python
S += (int(a))**3 ca ajoute juste le cube de a
tu n'extrais jamais les chiffres de a
tu n'extrais jamais les chiffres de a
The Axiom of Choice is obviously true, the Well-Ordering Principle is obviously false, and nobody knows about Zorn's Lemma. - Jerry Bona
Re: nombres d'armstrong python
Salut, pour qu'on comprenne mieux ton code sur le forum, utilise les balises code. Parce que là on voit pas comment t'as indenté par exemple. Tu pourrais aussi préciser pourquoi le code marche pas.
Le problème est ici :
Ce que tu voudrais c'est ajouter le cube du ième caractère de a converti en int à chaque itération, alors que là t'ajoutes carrément le cube de l'argument de la fonction. Tu dois donc utiliser a[ i ] au lieu de a.
Une autre solution est d'itérer sur les éléments de a au lieu de le faire avec les indices, c'est plus pratique à écrire.
Ensuite inutile de faire un test, c'est juste mais ça revient au même de renvoyer S == n , qui est un booléen qui vaut ce que tu veux.
Question bonus : écrire une fonction qui fait la même chose sans convertir en chaîne de caractères, parce que c'est quand même un peu de la triche
Le problème est ici :
Code : Tout sélectionner
S+=int(a)**3
Une autre solution est d'itérer sur les éléments de a au lieu de le faire avec les indices, c'est plus pratique à écrire.
Ensuite inutile de faire un test, c'est juste mais ça revient au même de renvoyer S == n , qui est un booléen qui vaut ce que tu veux.
Question bonus : écrire une fonction qui fait la même chose sans convertir en chaîne de caractères, parce que c'est quand même un peu de la triche
X2018
Re: nombres d'armstrong python
c juste une faute de touche:S+=(int(a)**3
en fait,j'ai essayé avec S+=(int(a))**3 mais ca n a rien donné
en fait,j'ai essayé avec S+=(int(a))**3 mais ca n a rien donné
Re: nombres d'armstrong python
et pour votre question bonus,Luckyos,on peut y repondre en utilisant le chiffre d'unité et celui de dizaine ..etc mais la question qui se pose prq mon script n a pas marché
Re: nombres d'armstrong python
Tu dois faire S+=int (a crochet i)**3 comme expliqué plus haut.
Dernière modification par Lily1998 le 19 août 2017 10:13, modifié 1 fois.
Re: nombres d'armstrong python
Tu sembles confondre énumération d"une chaîne de caractères et énumération de ses indices.
En énumérant les caractères qui composent la chaîne la boucle s'écrit :
En énumérant ses indices la boucle s'écrit :
En énumérant les caractères qui composent la chaîne la boucle s'écrit :
Code : Tout sélectionner
for c in a:
S += int(c)**3
Code : Tout sélectionner
for i in range(len(a)):
S += int(a[i])**3
Re: nombres d'armstrong python
oui oui j ai essayer avec les crochets ,au debut meme avant de poser la question(c juste que ca ne s ecrit pas dans mon msg) mais ca ca ne donne rien
Re: nombres d'armstrong python
Encore une fois ça veut dire quoi "ça ne donne rien" ?
Si après avoir défini la fonction il se passe rien c'est normal, idem si tu tapes estarmstrong(153) par exemple. Mais print(estarmstrong(153)) devrait afficher True par contre. Essaie de voir si t'as pas fait une faute de frappe, puis si tu trouves vraiment pas regarde ce code qui fonctionne très bien :
Si après avoir défini la fonction il se passe rien c'est normal, idem si tu tapes estarmstrong(153) par exemple. Mais print(estarmstrong(153)) devrait afficher True par contre. Essaie de voir si t'as pas fait une faute de frappe, puis si tu trouves vraiment pas regarde ce code qui fonctionne très bien :
SPOILER:
X2018
Re: nombres d'armstrong python
oui ca marche tres bien ton code(j ai jamais su cette astuce :le fait de jouer sur le script afin d'avoir True or False sans les evoquer dans le script) mais pour le mien ,je ne sais vraiment pas prq ca ne fonctionne pas