# 8 Conversion de types # Exercice # Écrire la fonction convertir(S) qui convertit son paramètre (un string) # en un entier. Pour que la conversion soit possible, le paramètre S doit # être être composé de chiffres éventuellement précédé d'un signe. def convertir(S) : # S est une liste de caractères # Il y a un signe au début ou pas ? signe= +1 # Initialisation du signe if S[0:1] in '+-': if S[0:1]=='-' : signe=-1 S = S[1:] # On enlève le signe if S.isdigit(): return int(S) * signe # On peut aussi écrire : str.isdigit(xs) ! else: return (S + " n'est pas un nombre") S=input('Donner une chaine de chiffres: ') print(convertir(S)) # Donner une chaine de chiffres: -124 # -124 # Donner une chaine de chiffres: 12a # Une version qui n'utilise ni int() ni isdigit() def convertir02(S1) : # S est une liste de caractères assert(S1 != '' and S1 != None) signe= +1 # Initialisation du signe val = 0; S=S1 if S[0] in '+-': if S[0:1]=='-' : signe=-1 S = S[1:] for car in S : if car in "0123456789": val = 10*val+ord(car)-ord('0') else : return (S1 + " n'est pas un nombre") return val * signe # On peut aussi écrire : str.isdigit(xs) ! S=input('Donner une chaine de chiffres : ') print(convertir02(S)) # Exercice # Écrire la fonction {\tt convertir2r(S)} qui convertit son paramètre (un # string) en un réel (loat). Pour que la conversion soit possible, le # paramètre {\it S} doit être être éventuellement précédé d'un signe, puis # composé de chiffres suivis d'un '.' puis une série de chiffres. La # présence d'un '.' est obligatoire, et qui est forcément suivi d'au moins # un chiffre. def convertir2r(S) : # S est une liste de caractères assert('.' in S) # '.' obligatoire lst_2_parties=S.split('.') # une liste des 2 parties val_int=0 if lst_2_parties[0] != '' : val_int=convertir02(lst_2_parties[0]) # vérifier que la partie décimale ne comporte pas un second signe ! assert(lst_2_parties[1][0] not in '+-') val_reel=0 if lst_2_parties[1] != '' : val_reel=convertir02(lst_2_parties[1]) # La partie décimale s'ajoute ou se retrache suivant le signe de val_int' if val_int >= 0 : return val_int + val_reel/(10**len(lst_2_parties[1])) else : return val_int - val_reel/(10**len(lst_2_parties[1])) S=input('Donner une chaine de chiffres (un réel) : ') print(convertir2r(S)) convertir2r('12.34') convertir2r('0.12') convertir2r('13.0') convertir2r('-3.001')