Select Git revision
08-conversion.py
-
Romain Vuillemot authoredRomain Vuillemot authored
08-conversion_exercices.py 2.71 KiB
# 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')