Problème codage python lycée

Résolu/Fermé
Arnaud - 29 déc. 2020 à 14:40
 Arnaud - 29 déc. 2020 à 16:34
Bonjour,
Je dois réaliser un petit programme sur python pour le lycée mais je rencontre un problème. Je dois d'abord crée un programme qui pour un nombre k renvoie k! (sans utiliser la commande factorielle). Ca j ai reussi. Apres je dois réaliser un encadrement de e du type 1+1/1!+1/2!+...+1/n!<e<1+1/1!+1/2!+...+1/n!+1/n!. Cependant lorsque je veux régler le "pas" pour avancer, non pas de 1 comme habituellement, mais ne 1/n! je rencontre un message d'erreur. Existe t'il une commande permettant de régler le pas pour que celui ci ne soit pas un entier ? ou quelles sont mes erreurs dans mon programme.

voici mon programme :
def facto(k):
if k==0:
return 1
else:
F=1
for i in range (2,k+1):
F=F*i
return F


def encadrement(n):
s=1
for w in range(1,n+1):
n=n+1/facto(n+1)
s=s+w
S=s+(1/facto(n))
e=float("inf")
s<e<S
return(s,S)

et le message d'erreur :
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Users\arch0\OneDrive\dm math 4.py", line 15, in encadrement
n=n+1/facto(n+1)
File "C:\Users\arch0\OneDrive\dm math 4.py", line 7, in facto
for i in range (2,k+1):
TypeError: 'float' object cannot be interpreted as an integer


merci de votre aide,
cordialement,


Configuration: Windows / Chrome 87.0.4280.88

4 réponses

yg_be Messages postés 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 Ambassadeur 1 552
29 déc. 2020 à 15:00
bonjour,
merci d'utiliser les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
je ne vois rien, dans ton code, qui spécifie le pas de l'indice de boucle.
ceci te sera peut-être utile:
import numpy as np
for r in np.arange(0, 1, 0.1):
    print(r)
0
bonjour,
merci de votre réponse aussi rapide,
def facto(k):
if k==0:
return 1
else:
F=1
for i in range (2,k+1):
F=F*i
return F


def encadrement(n):
s=1
for w in range(1,n+1):
n=n+1/facto(n+1)
s=s+w
S=s+(1/facto(n))
e=float("inf")
s<e<S
return(s,S)


je suis debutant sur python donc il se peut que j'ai du mal à comprendre.. Pour moi le pas est spécifié a la ligne 14 n=n+1/facto(n+1) car de ce que j'ai compris cela veut dire qu'on avance de 1/n!..
0
yg_be Messages postés 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 1 552
29 déc. 2020 à 15:41
peux-tu relire les explications à propos des balises de code, et spécifier le langage?
as-tu compris le message d'erreur?
n'hésite pas à imprimer les valeurs de tes variables, cela ne peut que t'aider.
à première vue, l'erreur est plutôt dans la logique mathématique.
0
c'est en langage python. j'ai utilisé les explications à propos des balises de code dans ma réponse mais visiblement en python le rendu est moins bons qu'avec le votre (numérotations des lignes etc).
Concernant le message d'erreur j'ai compris que la variable ne peut pas être considérée comme un entier. Mais justement ce n'est pas un entier, donc je voudrais savoir comment faire pour que le programme accepte cette variable non entière.
je ne sais pas si je m'exprime clairement donc je vais essayer d'expliciter le but du programme. Par exemple à la fin je dois obtenir 1+1/1!+1/2!+....+1/7!<e<1+1/1!+1/2!+....+1/7!+1/7! si je veux encadrement(7). ..
0
finalement, j'ai réussi à trouver mon erreur
def encadrement(n):
   s=1
   for w in range(1,n+1):
    s=s+1/facto(w)
   S=s+(1/facto(n))
   e=float("inf")
   s<e<S
   return(s,S)

avec ceci ça marche.
Merci beaucoup d'avoir repondu aussi rapidement !
0
yg_be Messages postés 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024 1 552
29 déc. 2020 à 16:30
en effet, tu essayais de calculer des factorielles de nombre non entiers.
je ne sais pas trop à quoi sert la ligne 7.
0
Arnaud > yg_be Messages postés 23313 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 8 novembre 2024
29 déc. 2020 à 16:34
A rien du tout, je l'ai juste laissé pour faire le lien avec l exercice, mais effectivement les lignes 6 et 7 sont inutiles pour faire fonctionner le programme
0