I'm coding a project, in which I have 2 files (dataStructure.py and calculUser.py) working together and 1 which is a test file.
In structureDonnees.py I have this function which reads a dataset containing cars and builds data structures :
# -*-encoding:utf-8-*-
import csv
import sys #pour utiliser maximum et minimum du type float
from calculUser import *
from trajetUser import *
def recupVoiture() :
#nom de la base de donnée
nomFichier = 'CO2_passenger_cars_v10.csv'
#on ouvre le fichier en lecture
opener = open(nomFichier, "r")
#On ouvre le fichier nomFichier en lecture
lectureFichier = csv.reader(opener, delimiter='\t')
#le dico contenant les carburants
fuelType = dict()
#le dico contenant les voitures
voiture = dict()
#le dico contenant les émissions de CO2 en g/km
emission = dict()
#minimum et maximum emission
min_emission = sys.float_info.max #initialisé à max(float) pour que l'on soit sûr que toutes les emissions soient plus petites
max_emission = sys.float_info.min #initialisé à min(float) pour que l'on soit sûr que toutes les emissions soient plus grandes
for row in lectureFichier :
#Si la colonne existe
if row:
#construction du dictionnaire voiture
if voiture.has_key(row[10]) :
if row[11].upper() not in voiture[row[10]] : voiture[row[10]].append("%s" %row[11].upper()) #on ajoute le modèle
else :
voiture[row[10]] = [] #on crée une liste vide contenant les modèles et leurs versions
voiture[row[10]].append("%s" %row[11]) #on ajoute le modèle et sa version
#construction du dictionnaire fuelType
if fuelType.has_key(row[10]) : fuelType[row[10]].append(row[19].upper()) #ajout du type de carburant utilisé par la voiture correspondante dans voiture{}
else :
fuelType[row[10]] = [] #on crée une liste vide contenant les carburants
fuelType[row[10]].append(row[19]) #ajout du type de carburant utilisé par la voiture correspondante dans voiture{}
#construction du dictionnaire emission
if emission.has_key(row[10]) :
emission[row[10]].append(row[14]) #ajout de la quantité de CO2 émise par la voiture correspondante dans voiture{}
min_emission = minEmission(float(row[14]), min_emission)
max_emission = maxEmission(float(row[14]), max_emission)
else :
emission[row[10]] = [] #on crée une liste vide contenant les émissions en CO2
fuelType[row[10]].append(row[14]) #ajout de la quantité de CO2 émise par la voiture correspondante dans voiture{}
min_emission = minEmission(float(row[14]), min_emission)
max_emission = maxEmission(float(row[14]), max_emission)
#On ferme le fichier
opener.close()
#La valeur de retour est un tableau contenant les structures de données générées.
res = [voiture, fuelType, emission, min_emission, max_emission]
return res
In the calculUser.py, I defined the minEmission and maxEmission function :
def minEmission(emissionFichier, min_emission) :
if emissionFichier < min_emission :
min_emission = emissionFichier
return min_emission
def maxEmission(emissionFichier, max_emission) :
if emissionFichier > max_emission :
max_emission = emissionFichier
return max_emission
When I'm executing test.py, I get an error with this line :
table = recupVoiture()
Traceback (most recent call last):
File "test.py", line 13, in <module>
tableau = recupVoiture()
File "/home/user/Polytech/ge3/ProjetPython/structureDonnees.py", line 60, in recupVoiture
min_emission = minEmission(float(row[14]), min_emission)
NameError: global name 'minEmission' is not defined
I don't understand why I get this error. By executing everything except test.py I get no error but when I do it doesn't execute due to this minEmission and maxEmission not defined.
Is it because I'm calling a function when I'm defining a function?
How could I fix it?
I fixed the problem, it seems like my functions minEmission() and maxEmission() couldn't do a reference to max_emission and min_emission since those variables are declared in structureDonnees.py and not in calculUser.py.
I fixed it by creating an intermediary variable which takes the value of min_emission and max_emission and which is returned, instead of min_emission and max_emission.
Plus, I had to do a : from calculUser import minEmission, maxEmissiondirectly in the recupVoiture() function. I know that's awful but it solved the problem. I'll use it until I find a better, cleaner solution.
Thanks for the help guys, I'll do a better post/code if I have to ask any other help ! :)
Related
Here's my code: I don't know why but I cant find my errors. It's a game that aims to remove pairs from your deck and have no more pairs. The name of the game is called mistrigry or lousy.
import random
def attend_le_joueur():
'''()->None
Pause le programme jusqu'au l'usager appui Enter
'''
try:
input("Appuyez Enter pour continuer. ")
except SyntaxError:
pass
def prepare_paquet():
'''()->list of str
Retourne une liste des chaines de caractères qui représente tous les cartes,
sauf le valet noir.
'''
paquet=[]
couleurs = ['\u2660', '\u2661', '\u2662', '\u2663']
valeurs = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
for val in valeurs:
for couleur in couleurs:
paquet.append(val+couleur)
paquet.remove('J\u2663') # élimine le valet noir (le valet de trèfle)
return paquet
def melange_paquet(p):
'''(list of str)->None
Melange la liste des chaines des caractères qui représente le paquet des cartes
'''
random.shuffle(p)
def donne_cartes(p):
'''(list of str)-> tuple of (list of str,list of str)
Retournes deux listes qui représentent les deux mains des cartes.
Le donneur donne une carte à l'autre joueur, une à lui-même,
et ça continue jusqu'à la fin du paquet p.
'''
donneur=[]
autre=[]
var = 1
for i in range(len(p)):
if var == 0:
donneur.append(p[i])
var = 1
elif var == 1:
autre.append(p[i])
var = 0
return(donneur,autre)
def elimine_paires(l):
'''
(list of str)->list of str
Retourne une copy de la liste l avec tous les paires éliminées
et mélange les éléments qui restent.
Test:
(Notez que l’ordre des éléments dans le résultat pourrait être différent)
>>> elimine_paires(['9♠', '5♠', 'K♢', 'A♣', 'K♣', 'K♡', '2♠', 'Q♠', 'K♠', 'Q♢', 'J♠', 'A♡', '4♣', '5♣', '7♡', 'A♠', '10♣', 'Q♡', '8♡', '9♢', '10♢', 'J♡', '10♡', 'J♣', '3♡'])
['10♣', '2♠', '3♡', '4♣', '7♡', '8♡', 'A♣', 'J♣', 'Q♢']
>>> elimine_paires(['10♣', '2♣', '5♢', '6♣', '9♣', 'A♢', '10♢'])
['2♣', '5♢', '6♣', '9♣', 'A♢']
'''
resultat=[]
if len(l) < 2:
return 1
l.sort()
l.append([''])
a = 1
while a < len(l):
if l[a-1][:-1] != l[a][:-1]:
resultat.append(l[a-1])
a = a + 1
else:
a = a + 2
random.shuffle(resultat)
return resultat
def affiche_cartes(p):
'''
(list)-None
Affiche les éléments de la liste p séparées par d'espaces
'''
for i in p:
print(p[i], end = ' ')
def entrez_position_valide(n):
'''
(int)->int
Retourne un entier du clavier, de 1 à n (1 et n inclus).
Continue à demander si l'usager entre un entier qui n'est pas dans l'intervalle [1,n]
Précondition: n>=1
'''
v = str(n)
s = int(input("S'il vous plait, veuillez entrer un entier de 1 à "+ v +":"))
while s > n or n < 1:
s = int(input("S'il vous plait, veuillez entrer un entier de 1 à "+ v +":"))
return (s)
def joue():
'''()->None
Cette fonction joue le jeu'''
p=prepare_paquet()
melange_paquet(p)
tmp=donne_cartes(p)
donneur=tmp[0]
humain=tmp[1]
donneur=elimine_paires(donneur)
humain=elimine_paires(humain)
print("Bonjour. Je m'appelle Robot et je distribue les cartes.")
print("Votre main est:")
affiche_cartes(humain)
print("Ne vous inquiétez pas, je ne peux pas voir vos cartes ni leur ordre.")
print("Maintenant défaussez toutes les paires de votre main. Je vais le faire moi aussi.")
attend_le_joueur()
tour = 0
while (tour <= 1 and tour >= 0):
if len(humain) == 0:
print("J'ai fini avec toutes mes cartes")
print("L'humain, vous avez gagné")
break
elif len(donneur) == 0:
print("J'ai fini avec toutes mes cartes")
print("Le robot à gagné")
break
else:
if tour == 0:
print("C'est à votre tour")
print("Vos cartes sont:")
affiche_cartes(humain)
v = len(donneur)
print("J'ai", n, "carte(s). Si 1 est ma première carte" + str(v), "la position de ma dernière carte, quelle carte voudriez-vous dans votre paquet?")
alt = entrez_position_valide(v)
if alt == 1:
print("voici la première carte que vous avez demandé")
else:
print("vous m'avez demandé cette n-ième carte:"+str(alt)+".")
print("voila" +donneur[int(alt)-1])
print(donneur[int(alt)-1], "votre nouvelle main est:")
humain.append(donneur[int(alt)-1])
donneur.remove(donneur[int(alt)-1])
affiche_cartes(humain)
print("Après avoir enlever les paires, votre main est:")
humain = elimine_paires(humain)
affiche_cartes(humain)
tour = 1
attend_le_joueur()
if tour == 1:
print("mon tour")
c = len(humain)
alt = random. randit(1, c)
if alt == 1:
print('Jai pris la première carte')
else:
print('Jai pris votre' + str(alt) + 'carte')
donneur.append(humain[int(alt) - 1])
humain.remove(humain[int(alt) - 1])
donneur = elimine_paires(donneur)
tour = 0
attend_le_joueur()
joue()
You have to change this
def affiche_cartes(p):
'''
(list)-None
Affiche les éléments de la liste p séparées par d'espaces
'''
for i in p:
print(p[i], end = ' ')
To
def affiche_cartes(p):
'''
(list)-None
Affiche les éléments de la liste p séparées par d'espaces
'''
for i in p:
print(i, end = ' ')
Your p Variable is a list of strings and you used a for each loop, which means i is an element of p and not an index.
Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 2 years ago.
Improve this question
for school I have to make a chained list in python with all the useful command. I made it with a friend on his windows computer and it work well.
The problem is, when i launch it on Linux, on Arch or on my Debian docker, it return :
>>> A= Liste(1,2,3,4,3,5,6,7)
>>> A
<Liste.Liste object at 0x7f26a0903278>
I can copy-paste the code, but as a french, my professor don't want that I write my code in English.
class Liste: #création de la classe
#initialisation de l'objet
def __init__(self, *elements):
self.list = [None, None] #inititialisation de la liste
for element in elements: #pour chaque élémment de la liste
if self.list[0] == None: #si le 1er élément la liste est vide
self.list[0] = element #le 1er élement de la liste devient élément
suivant = self.list #et suivant deviens la liste
else:
suivant[1] = [element, None] #sinon, le 2e élément de la liste devient [élément, None]
suivant = suivant[1] #et suivant avance dans la liste chainée
#ajouter un élément à la liste
def ajouter(self, element):
suivant = self.list #suivant devient la liste
while suivant[1] != None: #tant que le deuxième émént du duo n'est pas None
suivant = suivant[1] #suivant avance dans la liste chainée
suivant[1] = [element, None] #quand suivant à atteind le None, il remplace le None par l'élément
#inserer un élément dans une liste à un indice donné
def inserer(self, index, element):
suivant = self.list #suivant devient la liste
for _ in range(index-1): #on atteind le
suivant = suivant[1] #bon rang
suivant[1] = [element, suivant[1]] #on insère le bon élément à la bonne place
#acceder à un rang particulier
def acceder(self, index):
suivant = self.list #suivant devient la liste
for _ in range(index): #on atteind le bon rang
suivant = suivant[1]
return suivant[0]
#longueur de la liste avec len
def __len__(self):
suivant = self.list #suivant devient la liste
i = 0 #on crée un indice pour compter
if self.list[0] == None: #si le première élément du duo est vaut None
return i #la liste fait i éléments
else:
while suivant[1] != None: #sinon, tant que la dervière valeur du duo n'est pas nulle
i += 1 # i prend un point en plus
suivant = suivant[1] #et on avance dans la liste
return i+1 # et on retourne i+1
#supprimer un valeur à un indice donné
def supprimer_ind(self, index):
suivant = self.list #suivant devient la liste
for _ in range(index-1): #on se déplace
suivant = suivant[1] #jusqu'à l'élément que l'on veut supprimer
suivant[1] = suivant[1][1] #et on l'écrase avec la valeur suivante
#pour remplacer la liste
def remplacer(self, index, valeur):
suivant = self.list #On lui donne la valeur de la liste
for _ in range(index): #on se déplace
suivant = suivant[1] #jusqu'à l'élément que l'on veut modifier
suivant[0] = valeur #et on modifie la valeur
def supprimer_val(self, valeur):
ancien = None
suivant = self.list #On lui donne la valeur de la liste
while suivant[0] != valeur: #tant que la valeur de suivant[0] n'est pas égale à la valeur demandée,
ancien = suivant #on sauvegarde suivant
suivant = suivant[1] #et on avance dans la liste
if ancien == None: #si ancien est vide, alors on supprime la premiève valeur
suivant[0] = suivant[1][0]
suivant[1] = suivant[1][1]
else:
ancien[1] = suivant[1] #sinon, on remplace ancien par suivant[1]
#on vide la liste
def vider(self):
self.list = [None, None] #on remet à zéro la valeur de la liste
def __repr__(self):
suivant = self.list #suivant devient la liste
objet = "|"
while suivant[1] != None: #tant que le deuxième émént du duo n'est pas None
objet += str(suivant[0]) + ", "
suivant = suivant[1] #suivant avance dans la liste chainée
objet += str(suivant[0]) + "|"
return f'{objet}'
__repr__ magic is responsible for object representation formatting. You've messed up the indentation in def vider ... line. Here is a quickfix:
#on vide la liste
def vider(self):
self.list = [None, None] #on remet à zéro la valeur de la liste
def __repr__(self):
suivant = self.list #suivant devient la liste
objet = "|"
while suivant[1] != None: #tant que le deuxième émént du duo n'est pas None
objet += str(suivant[0]) + ", "
suivant = suivant[1] #suivant avance dans la liste chainée
objet += str(suivant[0]) + "|"
return f'{objet}'
Liste(1, 2, 3) returns |1, 2, 3|, as expected.
the value which is supposed to be returned is valid!!!!
The print(self.affichage) just above shows that it works!!!!
Why does it not return it ??? (the very last return)
so this code is a Polish Reverse Notation calculus :
you read it from left to right, the numbers are stored in a pile, and the operands apply to the two upper numbers of the pile (the two most recent)
# here comes the actual code :
class Calculatrice():
# création de la mémoire de la calculatrice
def __init__(self):
self.pile = []
self.affichage = []
def traitement(self,element):
# opérateur
if element in "+-*/":
# on vérifie qu'il y a les nombres suffisants pour effectuer ces opérations
if len(self.pile) > 1:
# addition
if element == "+":
resultat = self.pile[-2] + self.pile[-1]
# soustraction
elif element == "-":
resultat = self.pile[-2] - self.pile[-1]
# multiplication
elif element == "*":
resultat = self.pile[-2] * self.pile[-1]
# division
elif element == "/":
resultat = self.pile[-2] / self.pile[-1]
# ATTENTION : dans les cas de ces opérations, seuls deux nombres sont nécessaire,
# donc on peut généraliser les deux actions suivantes, mais ça ne devrait pas forcément être le cas.
# on dépile les nombres traités
del self.pile[len(self.pile)-2:]
# on empile le résultat
self.pile.append(resultat)
return True
elif len(self.pile) == 1:
if element == "*":
# erreur : pas assez de nombres pour effectuer une multiplication
print("Erreur 03 : Pas assez de nombres pour effectuer la multiplication.")
return False
elif element == "/":
# erreur : pas assez de nombres pour effectuer une division
print("Erreur 04 : Pas assez de nombres pour effectuer la division.")
return False
# si c'est une addition, on considère qu'on ajoute le nombre à 0, donc la pile ne change pas
else:
# si c'est une soustraction, on empile son opposé à la place du nombre
if element == "-":
self.pile[-1] = (self.pile[-1] * (-1))
return True
# la taille de la pile = 0, c-à-d. qu'aucun nombre n'a été stocké au préalable
else:
print("Erreur 02 : Pas assez de nombres pour effectuer une opération.")
return False
else:
for car in element:
if car not in "0123456789.":
# erreur : caractère non reconnu
print("Erreur 01 : La commande n'a pas été comprise.")
return False
# si on est arrivé jusqu'ici, on va considérer que c'est bon et que c'est un nombre
# on empile l'élément
self.pile.append(float(element))
return True
def npi(self,chaine):
# si la récurrence n'est pas à sa limite
if len(chaine) != 0:
# on vérifie qu'il y a des espaces
if " " in chaine:
# on parcourt la chaine jusqu'à l'espace suivant
i = 0
temp = ""
while chaine[i] != " ":
temp = temp+chaine[i]
i += 1
# on a fini d'extraire cet élément : on le traite.
traitement = self.traitement(temp)
# si il y a eu des erreurs de traitement : on arrête tout.
if traitement == False:
return ["Erreur"]
else:
# on continue de traiter le reste de la chaîne
self.npi(chaine[i+1:])
else:
# il n'y a pas d'espace, donc il n'y a qu'un seul élément : on le traite.
traitement = self.traitement(chaine)
# si il y a eu des erreurs de traitement : on arrête tout.
if traitement == False:
return ["Erreur"]
# on a fini, on sort du if
self.npi("")
else:
# la chaîne est vide : tous les éléments ont été traités. On renvoie le résultat final et on réinitialise la pile.
self.affichage = self.pile.pop()
print(self.affichage)
return self.affichage
c = Calculatrice()
print(c.npi("2 3 + 4 -"))
# doit retourner 1
You are returning a value only in the base-case. For the recursive cases in npi you are not returning anything (i.e. returning None). The printed value comes from inside a recursive call, the return value from that call is lost once you go back to the calling method.
You need to add return statements for the recursive cases in npi
def npi(self,chaine):
# si la récurrence n'est pas à sa limite
if len(chaine) != 0:
# on vérifie qu'il y a des espaces
if " " in chaine:
# on parcourt la chaine jusqu'à l'espace suivant
i = 0
temp = ""
while chaine[i] != " ":
temp = temp+chaine[i]
i += 1
# on a fini d'extraire cet élément : on le traite.
traitement = self.traitement(temp)
# si il y a eu des erreurs de traitement : on arrête tout.
if traitement == False:
return ["Erreur"]
else:
# on continue de traiter le reste de la chaîne
return self.npi(chaine[i+1:]) # HERE
else:
# il n'y a pas d'espace, donc il n'y a qu'un seul élément : on le traite.
traitement = self.traitement(chaine)
# si il y a eu des erreurs de traitement : on arrête tout.
if traitement == False:
return ["Erreur"]
# on a fini, on sort du if
return self.npi("") # HERE
else:
# la chaîne est vide : tous les éléments ont été traités. On renvoie le résultat final et on réinitialise la pile.
self.affichage = self.pile.pop()
print(self.affichage)
return self.affichage
You call npi recursively. In the last call the traitement variable is True.
But your code looks like the following:
if traitement == False:
return ["Erreur"]
else:
# on continue de traiter le reste de la chaîne
self.npi(chaine[i+1:])
and exits the function without returning anything. Therefore, you get the None object, when trying to print.
i am new to python, and im trying to program a scraper.
firstly, i extract this kind of string in a variable (lets call it data[1], because it's contained in an array):
\"description\":\"Alors qu\\u0027ils montaient dans l\\u0027un des
couloirs du versant nord du Hohneck (\\"le premier couloir \u00E0
droite\\"), deux alpinistes ont d\u00E9clench\u00E9 une plaque et ont
\u00E9t\u00E9 emport\u00E9s tous les deux. L\\u0027un sera enseveli et
l\\u0027autre ne pourra d\u00E9clencher l\\u0027alerte qu\\u0027\u00E0
la nuit. La victime ne sera retrouv\u00E9e que d\u00E9but avril.
\u003cbr\u003e Sur la photo prise en f\u00E9vrier 2011, le
trac\u00E9 approximatif de l\\u0027avalanche a \u00E9t\u00E9
repr\u00E9sent\u00E9.\",
then, i use :
data = data[1].encode().decode('unicode-escape')
but it gives me :
"description":"Alors qu\u0027ils montaient dans l\u0027un des couloirs
du versant nord du Hohneck (\"le premier couloir à droite\"), deux
alpinistes ont déclenché une plaque et ont été emportés tous les deux.
L\u0027un sera enseveli et l\u0027autre ne pourra déclencher
l\u0027alerte qu\u0027à la nuit. La victime ne sera retrouvée que
début avril. \u003cbr\u003e Sur la photo prise en février 2011, le
tracé approximatif de l\u0027avalanche a été représenté.",
indeed, char with accent had been replaced but apostrophes stay unprocessed !
It seems the two backslashes are the cause.
i tried several methods :
like decode twice and then "\u0027" become "'", but "é" become "é".
data.replace('é', 'é') or data.replace(u'\u0027', u'é') dont work
So, do you have any idea how i could fix this probleme ?
Problem fixed !
As user2357112 supports Monica said, i tried to process manually a json.
But doing :
data = html_page.find_all("script")
data = re.findall("(?<=JSON\.parse\(')[A-Za-z0-9'.?!/+=;:,()\\\ \"\-{_àâçéèêëíìîôùûæœÁÀÂÃÇÉÈÊËÍÌÎÔÙÛ©´<>]*", str(data))
data = data[0].encode().decode('unicode-escape') + "\"\"}"
data_dict = json.loads(data)
string_data_dict = json.dumps(data_dict)
for cle, val in data_dict.items() :
print(cle + " : " + str(val))
solves the bug.
With this code, an input string like :
<script>
var admin = false;
var avalanche = JSON.parse('{...\"description\":\"Alors qu\\u0027ils montaient dans l\\u0027un des couloirs du versant nord du Hohneck (\\\"le premier couloir \u00E0 droite\\\"), deux alpinistes ont d\u00E9clench\u00E9 une plaque et ont \u00E9t\u00E9 emport\u00E9s tous les deux. L\\u0027un sera enseveli et l\\u0027autre ne pourra d\u00E9clencher l\\u0027alerte qu\\u0027\u00E0 la nuit. La victime ne sera retrouv\u00E9e que d\u00E9but avril. \\u003cbr\\u003e Sur la photo prise en f\u00E9vrier 2011, le trac\u00E9 approximatif de l\\u0027avalanche a \u00E9t\u00E9 repr\u00E9sent\u00E9.\",...
gives an output like :
...
description : Alors qu'ils montaient dans l'un des couloirs du versant nord du Hohneck ("le premier couloir à droite"), deux alpinistes ont déclenché une plaque et ont été emportés tous les deux. L'un sera enseveli et l'autre ne pourra déclencher l'alerte qu'à la nuit. La victime ne sera retrouvée que début avril. <br> Sur la photo prise en février 2011, le tracé approximatif de l'avalanche a été représenté.
...
Thanks you.
i´m trying to make a program to find the limit of a function, however, i can´t find any effective way to ask the user to input a function, or convert any kind of user input into one, the best way i found was using:
f= lambda n: eval(input("")
however, using this method, everytime i run into a loop, the user will be asked to input the function over and over, which in this case makes it unusable. I greetly apreciate any feedback
Sorry if the post or my english is bad, i apoligize for it, i am new here and not a native english speaker, if it helps here is the complete code (with everything in french)
from lycee import *
n= int
# Rang actuel
f= lambda n: eval(input("veuillez introduire la fonction avec pour variable n"))
# Fonction introduite par l´usager
m= int(input("veuillez introduire la puisance de la valeur aussi grande, petite, ou proche que l´on veut"))
# Valeur max
l= int(input("veuillez introduire une limite eventuelle de la suite"))
d= int
# Prend une valeur selon la limite trouvé ou non
p= int(input("veuillez intoduire le pas"))
# Pas introduit par l´usager
x=int
# Valeur actuelle de la suite
n=1
d=0
x=0
#La limite est elle −∞?
while l>-10^m and n<10^15+1:
n=n+p
x=f(n)
if n==10^15+1:
print ("Après le calcul d’un billiard de termes, la suite ne semble pas tendre vers −∞")
else:
d=1
n=1
x=0
#La limite est elle +∞?
while l<10^m and n<10^15+1:
n=n+p
x=f(n)
if n==10^15+1:
print ("Après le calcul d’un billiard de termes, la suite ne semble pas tendre vers +∞")
else:
d=2
n=1
x=0
#La limite est elle l?
if l>=0:
while x+l>10^-m and n<10^15+1:
n=n+p
x=f(n)
if n==10^15+1:
print ("Après le calcul d’un billiard de termes, la suite ne semble pas tendre vers l")
else:
d=3
else:
while x-l>10^-m and n<10^15+1:
n=n+p
x=f(n)
if n==10^15+1:
print ("Après le calcul d’un billiard de termes, la suite ne semble pas tendre vers l")
else:
d=3
if d==1:
print ("Après le calcul d’un billiard de termes, la suite semble avoir pour limite −∞")
else:
if d==2:
print ("Après le calcul d’un billiard de termes, la suite semble avoir pour limite +∞")
else:
if d==3:
print ("Après le calcul d’un billiard de termes, la suite semble avoir pour limitel")
else:
print ("Après le calcul d’un billiard de termes, la suite semble ne pas avoir de limite")
You can use the compile function to compile the user's input into an AST object so that your lambda function can eval the AST object instead of asking the user for input again:
func = compile(input("veuillez introduire la fonction avec pour variable n"), '<input>', 'eval')
f = lambda n: eval(func)