Inscription / Connexion Nouveau Sujet
Niveau première
Partager :

Python

Posté par
Vale7401
11-12-20 à 18:37

Bonjour je dois corriger ce programme.
On a codé une fonction fact dont le paramètre est 1.
On veut entrer un entier naturel n strictement positif et qui renvoie le produit des nombres entiers de 1 à n inclus

Déjà je corrigerais range (1,n+1)
Car n est inclus dans le produit

Ensuite en sortie il faut afficher fact(n) et non n.
Faut il ajouter n=int(input ("valeur de n ?")
Pour qu'on connaisse le dernier facteur ?
Merci

Python

Posté par
Zormuche
re : Python 11-12-20 à 18:48

Bonsoir

la première correction est bonne

pour la deuxième, ça n'a pas de sens d'afficher fact(n), on est justement en train de définir ce qu'est la fonction fact
il y a une autre variable dans le programme qui joue ce rôle

pour la troisième, l'enregistrement de la valeur de n se fait par l'appel de la fonction fact avec un argument
le problème ici est que la fonction fact ne prend pas d'argument => erreur à corriger

Posté par
Vale7401
re : Python 11-12-20 à 18:53

L'autre variable c'est res ? Comme résultat ?

Posté par
Vale7401
re : Python 11-12-20 à 19:09

Je ne vois pas trop pour la 3ème correction

Posté par
Zormuche
re : Python 11-12-20 à 19:22

le but de la factorielle est de multiplier tous les entiers de 1 à n

facteur va successivement prendre les valeurs de 1 à n, et à chaque itération, res est multipliée par facteur, donc au final, res sera multipliée par tous les entiers de 1 à n, donc par (n!)
c'est pour ça que res est initialisée à 1 d'ailleurs

pour la 3ème correction, il faut voir la façon dont on définit une fonction

ici, la ligne "def fact():" implique que la fonction ne prend pas d'argument
Pour qu'elle prenne un argument en entrée, il faut mettre quelque chose dans la parenthèse (ici, c'est n)
comme ça, on pourra taper fact(10) pour obtenir le résultat de (10!)

Posté par
Vale7401
re : Python 11-12-20 à 20:00

Je ne comprends pas ici le terme argument...

Posté par
Zormuche
re : Python 11-12-20 à 21:28

L'argument c'est l'entrée
Quand tu calcules une factorielle, tu calcules la factorielle d'un entier (n), c'est lui l'argument

Posté par
Vale7401
re : Python 12-12-20 à 15:33

Citation :
pour la deuxième, ça n'a pas de sens d'afficher fact(n), on est justement en train de définir ce qu'est la fonction fact
il y a une autre variable dans le programme qui joue ce rôle

je propose return res.

Posté par
Zormuche
re : Python 12-12-20 à 16:30

c'est ça

Posté par
Vale7401
re : Python 12-12-20 à 16:49

super merci
dans un autre post mathafou me dit que res n'est pas destiné à afficher un résultat.
ici on pourrait croire le contraire...
A la place de Res on aurait pu écrire r=1
return r?
merci

Posté par
mathafou Moderateur
re : Python 12-12-20 à 19:39

vu qu'on parle de moi ...

return res définit la valeur retournée par la fonction

c'est la valeur prise par la fonction quand on l'appelle un point c'est tout

ce qu'on fera de cette valeur (l'utiliser , l'afficher etc)
dépend de comment et où on appelle (utilise) la fonction

si on tape fact(5) en ligne de commande dans la console, il va afficher la valeur
de la même façon que si on tape simplement 3+4 dans la console, il affichera 7

par contre si dans un programme j'appelle (j'utilise) fact()
il fera le calcul sans afficher ce résultat "intermédiaire"
par exemple si dans le programme
j'écris quelque part
S = fact(3)+fact(4)
il va calculer ces deux factorielles et en faire la somme sans rien dire du tout.

bien distinguer dans Python le programme (module) et la console dans laquelle on va utiliser ce programme
(exemple avec EduPython et sur l'autre exo )

Python

Posté par
Vale7401
re : Python 15-12-20 à 15:04

J'ai installé Edupython, et je commence à taper mon programme.
J'ai :
def fact(n)
res=1


Et déjà un message d'erreur Syntax : expected an indented block

Posté par
mathafou Moderateur
re : Python 15-12-20 à 15:33

l'indentation est fondamentale dans Python (décalages en débuts de lignes)
les ":" sont obligatoire après un def

c'est

def fact(n):
   res = 1
   ...


cette indentation est automatique dans Edupython quand on tape
def fact() : (sans oublier les ":")
en passant à la ligne suivante il met automatiquement ces espaces
il ne faut surtout pas les effacer !!

on ne les supprime que quand le bloc est terminé pour mettre du code qui est en dehors de ce bloc
(quand on quitte la définition de fonction, en l'occurrence)

def fact(n):
   res = 1
   ...
   ...
   return ...

autre chose
...


et pareil pour les boucles, les for, while les if et else etc
les deux points et l'indentation qui augmente

Posté par
Vale7401
re : Python 15-12-20 à 16:22

Ok merci j'ai dû effacer l'indentation par erreur
def fact(n) :
   res=1
for facteur in range (n+1)
res=res*facteur
return res

J'ai voulu tester immédiatement dans la console
fact(3):

Name Error : name 'fact' is not defined.

Posté par
Vale7401
re : Python 15-12-20 à 16:54

def fact(n) :
   res=1
   for facteur in range (1,n+1)
   res=res*facteur
   return res

Et quand je lance ma fonction
fact(3)
1

Au lieu de 6!

Posté par
mathafou Moderateur
re : Python 15-12-20 à 17:10

Citation :
et pareil pour les boucles, les for, while les if et else etc
les deux points et l'indentation qui augmente

Posté par
mathafou Moderateur
re : Python 15-12-20 à 17:13

regarde attentivement comment est l'indentation (les espaces en debut de ligne) dans ce qui était donné à l'origine

Python

l'indentation est bonne
(les trucs à corriger étaient autre chose)

Posté par
Vale7401
re : Python 15-12-20 à 18:06

def fact(n) :
   res=1
   for facteur in range (1,n+1):
      res=res*facteur
      return (res)

Le return (res) se place dans le programme automatiquement sous le res=res*facteur...

Posté par
Vale7401
re : Python 15-12-20 à 18:33

Mon écran

Python

Posté par
mathafou Moderateur
re : Python 15-12-20 à 18:39

Citation :
on ne les supprime que quand le bloc est terminé pour mettre du code qui est en dehors de ce bloc
(quand on quitte la définition de fonction, en l'occurrence)

pour dire que le return est en dehors du bloc "for" on supprime un niveau d'indentation,
volontairement par la touche effacement arrière Python

Posté par
Vale7401
re : Python 15-12-20 à 18:44

Ok c'est bon si le return est aligné

Posté par
Vale7401
re : Python 15-12-20 à 18:53

Merci je vais essayer de taper l'autre programme



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !