Outils pour utilisateurs

Outils du site


teaching:progappchim:factorielle-3

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
teaching:progappchim:factorielle-3 [2015/02/25 08:04]
villersd
teaching:progappchim:factorielle-3 [2017/02/24 09:28] (Version actuelle)
villersd
Ligne 2: Ligne 2:
  
 Voici une version avec la fonction factorielle() Voici une version avec la fonction factorielle()
-<sxh python; title : factorielle04-fonction_1.py>​+<code python factorielle04-fonction_1.py>​
 #! /​usr/​bin/​env python #! /​usr/​bin/​env python
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
Ligne 10: Ligne 10:
 """​ """​
 def factorielle(arg_n):​ def factorielle(arg_n):​
-    ​structure de répétition pour appliquer la définition de la factorielle +    ​"""​ 
-    reponse=1 ​ # la réponse sera dans la variable reponse +    ​structure de répétition pour appliquer la définition de la factorielle 
-    i=1  # on va commencer par 1 +    """​ 
-    while i <= arg_n: ​ # répétition "​while"​ avec une condition à préciser +    reponse = 1               ​# la réponse sera dans la variable reponse 
-        reponse = reponse*i ​   #​actualisation de reponse +    i = 1                     ​# on va commencer par 1 
-        i=i+1                #​incrémenter i+    while i <= arg_n: ​        ​# répétition "​while"​ avec une condition à préciser 
 +        reponse = reponse * i #​actualisation de reponse 
 +        i = i + 1             ​#​incrémenter i
     return reponse     return reponse
  
 # on demande le nombre : # on demande le nombre :
-print "​Calcul de la factorielle de n" +print("​Calcul de la factorielle de n") 
-chainelue=raw_input("Que vaut n ? ") +chainelue=input("Que vaut n ? ") 
-n= int(chainelue) +n = int(chainelue) 
-print n+print(n)
  
 # on affiche la réponse # on affiche la réponse
-print "La factorielle vaut ",​factorielle(n) +print("La factorielle vaut ",​factorielle(n)
-</sxh>+</code>
  
 On aurait pu utiliser une autre structure de répétition que "​[[https://​docs.python.org/​2/​reference/​compound_stmts.html#​while|while]]",​ comme le "​[[https://​docs.python.org/​2/​reference/​compound_stmts.html#​for|for]]"​ en utilisant une liste de facteurs à l'aide de "​[[https://​docs.python.org/​2/​library/​functions.html?​highlight=range#​range|range]]"​. Cette dernière fonction doit utiliser comme première valeur incluse (start) 1, et comme dernière valeur exclue (stop) l'​argument de la factorielle augmenté de 1. Voici cette variante de la fonction : On aurait pu utiliser une autre structure de répétition que "​[[https://​docs.python.org/​2/​reference/​compound_stmts.html#​while|while]]",​ comme le "​[[https://​docs.python.org/​2/​reference/​compound_stmts.html#​for|for]]"​ en utilisant une liste de facteurs à l'aide de "​[[https://​docs.python.org/​2/​library/​functions.html?​highlight=range#​range|range]]"​. Cette dernière fonction doit utiliser comme première valeur incluse (start) 1, et comme dernière valeur exclue (stop) l'​argument de la factorielle augmenté de 1. Voici cette variante de la fonction :
  
-<sxh python>+<code python>
 def factorielle2(arg_n):​ def factorielle2(arg_n):​
-    ​structure de répétition pour appliquer la définition de la factorielle +    ​"""​ 
-    reponse=1 ​ # la réponse sera dans la variable reponse +    ​structure de répétition pour appliquer la définition de la factorielle 
-    for i in range(1, arg_n + 1):  # répétition "​for"​ avec "​range"​  +    """​ 
-        reponse = reponse*i ​   # actualisation de reponse+    reponse = 1                   ​# la réponse sera dans la variable reponse 
 +    for i in range(1, arg_n + 1): # répétition "​for"​ avec "​range"​  
 +        reponse = reponse * i     ​# actualisation de reponse
     return reponse     return reponse
-</sxh>+</code>
  
  
 Il est aussi possible d'​utiliser une variante de "​while"​ en progressant du facteur le plus grand jusque "​1"​ (en fait même "​2"​ puisque 1 est l'​élément neutre de la multiplication. Voici cette variante de la fonction : Il est aussi possible d'​utiliser une variante de "​while"​ en progressant du facteur le plus grand jusque "​1"​ (en fait même "​2"​ puisque 1 est l'​élément neutre de la multiplication. Voici cette variante de la fonction :
  
-<sxh python>+<code python>
 def factorielle3(arg_n):​ def factorielle3(arg_n):​
-    ​structure de répétition pour appliquer la définition de la factorielle +    ​"""​ 
-    reponse=1 ​ # la réponse sera dans la variable reponse +    ​structure de répétition pour appliquer la définition de la factorielle 
-    while arg_n > 1:  # répétition "​while"​  +    """​ 
-        reponse = reponse*arg_n ​   # actualisation de reponse +    reponse = 1                   ​# la réponse sera dans la variable reponse 
-        arg_n = arg_n -1              # décrémenter arg_n+    while arg_n > 1:              # répétition "​while"​  
 +        reponse = reponse * arg_n # actualisation de reponse 
 +        arg_n = arg_n - 1         ​# décrémenter arg_n
     return reponse     return reponse
-</sxh>+</code>
  
-La factorielle étant une fonction courante en mathématique,​ elle est bien sûr intégrée au module "​math",​ appelable par l'​instruction "​import math". On peut vérifier en mode console de Python via la commande "​help(math)"​ que la fonction "​[[https://​docs.python.org/​2/​library/​math.html#​math.factorial|factorial]]"​ est effectivement présente. On pourra donc facilement calculer la factorielle d'un nombre naturel, et vous pourrez tester que sur un argument négatif ou non-entier, math.factorial() renvoie un message d'​erreur.+La factorielle étant une fonction courante en mathématique,​ elle est bien sûr intégrée au module "​math",​ appelable par l'​instruction "​import math". On peut vérifier en mode console de Python via la commande "​help(math)"​ que la fonction "​[[https://​docs.python.org/​3/​library/​math.html#​math.factorial|factorial]]"​ est effectivement présente. On pourra donc facilement calculer la factorielle d'un nombre naturel, et vous pourrez tester que sur un argument négatif ou non-entier, math.factorial() renvoie un message d'​erreur.
  
 Il existe une autre approche de la programmation de la factorielle,​ basée sur sa définition [[http://​fr.wikipedia.org/​wiki/​Algorithme_r%C3%A9cursif#​Un_exemple_plus_math.C3.A9matique_:​_la_factorielle|récursive]] : $n!=(n-1)! n$. On peut définir la fonction de telle sorte qu'​elle s'​appelle elle-même avec un argument décrémenté de une unité. Reste à gérer la définition de la factorielle de zéro afin que l'​invocation de la factorielle par elle-même ne se fasse pas de manière infinie. Du fait que Python est un langage interprété,​ une limitation apparaît cependant dans l'​implémentation récursive, du fait de la gestion nécessaire d'une pile d'​informations des appels successifs. Voici cette variante de la fonction : Il existe une autre approche de la programmation de la factorielle,​ basée sur sa définition [[http://​fr.wikipedia.org/​wiki/​Algorithme_r%C3%A9cursif#​Un_exemple_plus_math.C3.A9matique_:​_la_factorielle|récursive]] : $n!=(n-1)! n$. On peut définir la fonction de telle sorte qu'​elle s'​appelle elle-même avec un argument décrémenté de une unité. Reste à gérer la définition de la factorielle de zéro afin que l'​invocation de la factorielle par elle-même ne se fasse pas de manière infinie. Du fait que Python est un langage interprété,​ une limitation apparaît cependant dans l'​implémentation récursive, du fait de la gestion nécessaire d'une pile d'​informations des appels successifs. Voici cette variante de la fonction :
  
-<sxh python>+<code python>
 def factorielle4(arg_n):​ def factorielle4(arg_n):​
-    ​écriture récursive pour appliquer la définition de la factorielle+    ​"""​ 
 +    ​écriture récursive pour appliquer la définition de la factorielle 
 +    """​
     if arg_n == 0:     if arg_n == 0:
         return 1         return 1
     else:     else:
         return factorielle4(arg_n - 1) * arg_n         return factorielle4(arg_n - 1) * arg_n
-</sxh>+</code>
  
 <note tip>​Exercice : rassembler toutes les fonctions dans un même programme (elles doivent figurer en tête, avant les instructions "​principales"​),​ et prévoir l'​importation du module math. Imprimer les factorielles calculées à l'aide des différentes possibilités. Pour une sortie formatée avec alignement des nombres, vous pouvez utiliser l'​[[notions_fondamentales#​impression_formatee_de_texte_et_nombres_print|impression formatée de texte et nombres avec "​print"​]].</​note>​ <note tip>​Exercice : rassembler toutes les fonctions dans un même programme (elles doivent figurer en tête, avant les instructions "​principales"​),​ et prévoir l'​importation du module math. Imprimer les factorielles calculées à l'aide des différentes possibilités. Pour une sortie formatée avec alignement des nombres, vous pouvez utiliser l'​[[notions_fondamentales#​impression_formatee_de_texte_et_nombres_print|impression formatée de texte et nombres avec "​print"​]].</​note>​
teaching/progappchim/factorielle-3.txt · Dernière modification: 2017/02/24 09:28 par villersd