nombres d'armstrong python

Messages : 47

Enregistré le : 18 août 2017 22:22

Classe : MP

nombres d'armstrong python

Message par taupin98 » 18 août 2017 22:35

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

Messages : 6651

Enregistré le : 17 avr. 2012 21:19

Classe : Thé à la

Re: nombres d'armstrong python

Message par bullquies » 18 août 2017 22:49

S += (int(a))**3 ca ajoute juste le cube 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

Messages : 479

Enregistré le : 14 juin 2015 11:42

Classe : 1A

Re: nombres d'armstrong python

Message par Luckyos » 18 août 2017 22:59

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 :

Code : Tout sélectionner

S+=int(a)**3
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 ;)
2015 - 2016 : Terminale S-SVT Spé maths
2016 - 2018 : MPSI/MP* (Option Info) Ginette

X2018

Messages : 47

Enregistré le : 18 août 2017 22:22

Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » 19 août 2017 02:38

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é

Messages : 47

Enregistré le : 18 août 2017 22:22

Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » 19 août 2017 02:42

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é

Messages : 285

Enregistré le : 16 févr. 2017 19:16

Classe : PC*

Re: nombres d'armstrong python

Message par Lily1998 » 19 août 2017 07:36

Tu dois faire S+=int (a crochet i)**3 comme expliqué plus haut.
Modifié en dernier par Lily1998 le 19 août 2017 10:13, modifié 1 fois.

Messages : 31

Enregistré le : 11 déc. 2015 08:24

Re: nombres d'armstrong python

Message par left_shift » 19 août 2017 09:58

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 :

Code : Tout sélectionner

for c in a:
    S += int(c)**3
En énumérant ses indices la boucle s'écrit :

Code : Tout sélectionner

for i in range(len(a)):
    S += int(a[i])**3

Messages : 47

Enregistré le : 18 août 2017 22:22

Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » 19 août 2017 11:27

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

Messages : 479

Enregistré le : 14 juin 2015 11:42

Classe : 1A

Re: nombres d'armstrong python

Message par Luckyos » 19 août 2017 16:38

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 :

SPOILER:

Code : Tout sélectionner

def estarmstrong(n):
    a = str(n)
    s = 0
    for c in a:
        s += int(c) ** 3
    return s == n
    
print(estarmstrong(153))
print(estarmstrong(154))
print(estarmstrong(407))
2015 - 2016 : Terminale S-SVT Spé maths
2016 - 2018 : MPSI/MP* (Option Info) Ginette

X2018

Messages : 47

Enregistré le : 18 août 2017 22:22

Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » 19 août 2017 20:46

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 :!: :?:

Répondre