nombres d'armstrong python

Modérateur : Michel Quercia

Répondre
taupin98
Messages : 43
Enregistré le : ven. août 18, 2017 10:22 pm
Classe : MP

nombres d'armstrong python

Message par taupin98 » ven. août 18, 2017 10:35 pm

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

Avatar du membre
bullquies
Messages : 6343
Enregistré le : mar. avr. 17, 2012 9:19 pm
Classe : Thé à la

Re: nombres d'armstrong python

Message par bullquies » ven. août 18, 2017 10:49 pm

S += (int(a))**3 ca ajoute juste le cube de a

tu n'extrais jamais les chiffres de a

Luckyos
Messages : 302
Enregistré le : dim. juin 14, 2015 11:42 am
Classe : MP*

Re: nombres d'armstrong python

Message par Luckyos » ven. août 18, 2017 10:59 pm

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 - 2017 : MPSI Ginette
2017 - 2018 : MP* (Option Info) Ginette

taupin98
Messages : 43
Enregistré le : ven. août 18, 2017 10:22 pm
Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » sam. août 19, 2017 2:38 am

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é

taupin98
Messages : 43
Enregistré le : ven. août 18, 2017 10:22 pm
Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » sam. août 19, 2017 2:42 am

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é

Lily1998
Messages : 223
Enregistré le : jeu. févr. 16, 2017 8:16 pm
Classe : PC*

Re: nombres d'armstrong python

Message par Lily1998 » sam. août 19, 2017 7:36 am

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

left_shift
Messages : 27
Enregistré le : ven. déc. 11, 2015 9:24 am

Re: nombres d'armstrong python

Message par left_shift » sam. août 19, 2017 9:58 am

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

taupin98
Messages : 43
Enregistré le : ven. août 18, 2017 10:22 pm
Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » sam. août 19, 2017 11:27 am

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

Luckyos
Messages : 302
Enregistré le : dim. juin 14, 2015 11:42 am
Classe : MP*

Re: nombres d'armstrong python

Message par Luckyos » sam. août 19, 2017 4:38 pm

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 - 2017 : MPSI Ginette
2017 - 2018 : MP* (Option Info) Ginette

taupin98
Messages : 43
Enregistré le : ven. août 18, 2017 10:22 pm
Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » sam. août 19, 2017 8:46 pm

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

Lily1998
Messages : 223
Enregistré le : jeu. févr. 16, 2017 8:16 pm
Classe : PC*

Re: nombres d'armstrong python

Message par Lily1998 » sam. août 19, 2017 9:21 pm

Tu l'as testée, au moins, ta fonction ? Qu'est-ce qu'on te renvoie ?

taupin98
Messages : 43
Enregistré le : ven. août 18, 2017 10:22 pm
Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » sam. août 19, 2017 10:33 pm

File "<tmp 3>", line 14
if S==n:
^
SyntaxError: invalid syntax

c eest ce qu on me donne

Lily1998
Messages : 223
Enregistré le : jeu. févr. 16, 2017 8:16 pm
Classe : PC*

Re: nombres d'armstrong python

Message par Lily1998 » sam. août 19, 2017 10:45 pm

Tu as sûrement dû oublier une parenthèse à la ligne précédente.

taupin98
Messages : 43
Enregistré le : ven. août 18, 2017 10:22 pm
Classe : MP

Re: nombres d'armstrong python

Message par taupin98 » sam. août 19, 2017 11:12 pm

oui c vrai ,je suis vraiment desolée ,ca marche maitenant ,mais quand meme j ai appris une bonne astuce ,celle donnée par Luckyos

Luckyos
Messages : 302
Enregistré le : dim. juin 14, 2015 11:42 am
Classe : MP*

Re: nombres d'armstrong python

Message par Luckyos » dim. août 20, 2017 12:24 am

Si on y réfléchit un peu en fait c'est pas vraiment une astuce. Le truc c'est que ici la structure if est redondante : par définition du if, ça renvoie True si le booléen S == n vaut True, et False sinon (c'est-à-dire quand S == n vaut False). On voit bien que ça sert pas à grand chose ;) .
2015 - 2016 : Terminale S-SVT Spé maths
2016 - 2017 : MPSI Ginette
2017 - 2018 : MP* (Option Info) Ginette

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Baidu [Spider] et 2 invités