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] villersdteaching: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
  • de villersd