Déterminer les six premiers termes d'une suite à l'aide d'un algorithme

a marqué ce sujet comme résolu.

Je te propose une solution plus courte yann0 (pour que tu montes en compétences) :

print(list(n*3-1 for n in range(0,6)))

C’est ce que l’on appelle un sucre syntaxique, une version plus compacte d’un morceau de code. La déclaration est légèrement différente.

Dans celui-ci, nous avons une boucle for n in range(0,6) qui remplace respectivement tes lignes 1, 3 et 11 avec lesquels tu souhaites finalement obtenir une variable n comprise entre 0 et 6 (ce que l’on appelle typiquement une variable itérative). On pourrait le traduire par : "pour n dans l’intervalle [0; 6]".

En écrivant n*3–1 for n in range(0,6) on indique au programme que l’on va utiliser la variable itérative n dans le calcul se trouvant à gauche n*3–1. Ce qui va donner : 0*3-1 puis 1*3-1 puis 2*3-1 et ainsi de suite. Jusqu’à ce que nous ayons nos 6 valeurs.

Pour obtenir les résultats, il va falloir englober cette boucle de la fonction list(). Nous pouvons ensuite les afficher avec print().

(A savoir) Python va lire le code ainsi : une boucle sur n entre 0 et 6 permettant de calculer n*3–1 avec n*3-1 for n in range(0,6), une transformation en liste avec list() et un affichage des résultats avec print().

Je te propose un autre exercice :

1) Calculer le 3ème, 4ème et 5ème termes de la suite Un = n²+3. Juste en modifiant le premier code que tu as posté.

2) Réaliser la somme du résultat précédent. Y’a une fonction toute prête pour ça !

3) Transformer l’algorithme trouvé en utilisant les sucres syntaxiques (comme pour celui-ci, ça prend une seule ligne).

Surtout prends ton temps pour assimiler. Ce n’est pas insurmontable et je suis certain que tu recevras une certaine fierté ! :)

Avant de « monter en compétences », il serait sans doute plus sage qu’il consolide ses bases de Python. Ce n’est même plus mettre la charrue avant les bœufs, là : c’est vendre le blé avant de l’avoir planté.

Il vaut mieux en rester à des éléments simples mais bien maîtrisés que du « sucre syntaxique » incompréhensible pour un débutant et même souvent mal compris ou mal assimilé par des programmeurs plus avancés.

Sans compter que c’est franchement pas lisible et que pour trois lignes de plus, je pense qu’il vaut mieux avoir un code clair et compréhensible pour tout le monde.

+0 -0

Je masque tout, je me suis planté sur l’énoncé de la question. J’ai répondu comme si la question initiale était : bâtir les 6 premiers termes de la suite U(n) = 3*U(n-1)-1

n = 0
while n < 6
      m = n * 3
      p = m - 1
      print (p)
n = n +1      

yann0

Attention, ce code est faux.

La 1ère correction, c’est d’indenter la dernière ligne comme il faut, sinon le programme ne se finira jamais (boucle infinie) :

n = 0
m = 0
p = 0
while n < 6 :
      m = n * 3
      p = m - 1
      print (p)
      n = n +1      

Et même comme ça, les valeurs affichées seront fausses.

Vérifions le :

n = 0
p = 0
m = 0
while n < 6 :
      m = n * 3
      print ( "verif001", "  m=", m, "  p=",p, "  n=",n) 
      p = m - 1
      print ( "verif002", "  m=", m, "  p=",p, "  n=",n) 
      print (p)
      n = n +1      
      print ( "verif003", "  m=", m, "  p=",p, "  n=",n) 

J’exécute ce code, par exemple sur ce lien

Et ça m’affiche :

verif001   m= 0   p= 0   n= 0                                                                                                                                                        
verif002   m= 0   p= -1   n= 0                                                                                                                                                       
-1                                                                                                                                                                                   
verif003   m= 0   p= -1   n= 1                                                                                                                                                       
verif001   m= 3   p= -1   n= 1                                                                                                                                                       
verif002   m= 3   p= 2   n= 1                                                                                                                                                        
2                                                                                                                                                                                    
verif003   m= 3   p= 2   n= 2                                                                                                                                                        
verif001   m= 6   p= 2   n= 2                                                                                                                                                        
verif002   m= 6   p= 5   n= 2                                                                                                                                                        
5                                                                                                                                                                                    
verif003   m= 6   p= 5   n= 3                                                                                                                                                        
verif001   m= 9   p= 5   n= 3                                                                                                                                                        
verif002   m= 9   p= 8   n= 3                                                                                                                                                        
8                                                                                                                                                                                    
verif003   m= 9   p= 8   n= 4                                                                                                                                                        
verif001   m= 12   p= 8   n= 4                                                                                                                                                       
verif002   m= 12   p= 11   n= 4                                                                                                                                                      
11                                                                                                                                                                                   
verif003   m= 12   p= 11   n= 5                                                                                                                                                      
verif001   m= 15   p= 11   n= 5                                                                                                                                                      
verif002   m= 15   p= 14   n= 5                                                                                                                                                      
14                                                                                                                                                                                   
verif003   m= 15   p= 14   n= 6      

P qui vaut successivement -1,2,5,8,11 et 14, ce n’est pas le résultat attendu.

Je te laisse chercher ce qu’il faut changer pour que le résultat soit correct.

+0 -1

Attention, ce code est faux.

En effet. Et je comprends mal quel est l’intérêt de répéter quelque chose qui a déjà été dit plus haut sinon rajouter de la confusion.

Edition : Je masque à mon tour le code cité, étant donné que désormais les choses sont claires.

n = 0
m = 0
p = 0
while n < 6 :
      m = n * 3
      p = m - 1
      print (p)
      n = n +1      

Heureusement que l’auteur précise dans son premier post de ne pas lui donner de code mais de le laisser réfléchir.

P qui vaut successivement -1,2,5,8,11 et 14, ce n’est pas le résultat attendu.

Il est possible que je manque l’évidence, mais a priori, ce sont bel et bien les résultats attendus pour les six premiers termes de la suite : Un=3n1U_n = 3n - 1.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte