Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Conversions de données d'un type à un autre

Les booléens Spécifier le type des variables


Accès rapide :
La vidéo
Pourquoi convertir de données ?
Convertir des chaînes de caractères en valeurs numériques
Convertir des données numériques en chaînes de caractères
Travaux pratiques
L'énoncé
La correction

La vidéo

Vous apprendrez, grâce à cette vidéo, à convertir vos données d'un type à un autre.


Conversions de données d'un type à un autre.

Pourquoi convertir de données ?

Depuis le début de ce tutoriel, nous avons appris à utiliser différents types de données du langage Python. Mais parfois, il est nécessaire de convertir une donnée d'un type vers un autre type de données. Par exemple, la fonction input permet de saisir une chaîne de caractères. Mais comment convertir cette chaîne en une valeur flottante si vous avez saisi un nombre ?

>>> help(input)
Help on built-in function input in module builtins:

input(prompt=None, /)
    Read a string from standard input.  The trailing newline is stripped.
    
    The prompt string, if given, is printed to standard output without a
    trailing newline before reading input.
    
    If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
    On *nix systems, readline is used if available.
>>>
>>> str_value = input("Veuillez saisir un nombre : ")
Veuillez saisir un nombre : 3.1415
>>> type(str_value)
<class 'str'>
>>> value = float(str_value)
>>> type(value)
<class 'float'>
>>> print(value)
3.1415
>>> 

Comme vous le constatez les choses sont en fait très simples : on utilise le nom du type de destination pour produire une nouvelle donnée du type souhaité (value = float(str_value)).

Convertir des chaînes de caractères en valeurs numériques

Si une chaîne de caractères contient la représentation d'une valeur numérique, il est alors possible de convertir cette chaîne en une donnée numérique. La seule chose à savoir c'est quel est le type de destination souhaité.

Pour convertir une chaîne de caractères en un flottant, veuillez procéder ainsi :

>>> s = "10.3"
>>> f = float(s)
>>> type(f)
<class 'float'>
>>> print(f)
10.3
>>> 

Pour convertir une chaîne de caractères, représentant un entier, en une valeur entière, veuillez procéder ainsi :

>>> s = "123"
>>> i = int(s)
>>> type(i)
<class 'int'>
>>> print(i)
123
>>> 

Mais attention : si vous cherchez à convertir une chaîne de caractères, représentant un flottant, en une valeur entière, alors les choses ne seront pas si simples.

>>> pi = "3.1415"
>>> i = int(pi)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '3.1415'
>>> 

Dans ce cas, il faudra préalablement passer par une valeur flottante.

>>> pi = "3.1415"
>>> f = float(pi)
>>> i = int(f)
>>> print(i)
3
>>> # Ou bien ...
>>> i = int(float(pi))
>>> print(i)
3
>>> 

Notez enfin que si la chaîne de caractères ne contient la représentation d'une donnée numérique, alors la conversion aboutira à un déclenchement d'exception, comme le montre l'exemple ci-dessus.

>>> s = "Ce n'est pas un nombre"
>>> f = float(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: "Ce n'est pas un nombre"
>>> 

Convertir des données numériques en chaînes de caractères

Pour convertir une donnée numérique en un chaîne de caractères il suffit de reconstruire une donnée de type str à partir de cette donnée. Voici un exemple d'utilisation.

>>> pi = 3.1415
>>> message = "\u03c0 = " + str(pi)
>>> print(message)
π = 3.1415
>>> 
si vous cherchez à convertir une valeur numérique en chaîne dans le but de l'afficher sur la console, sachez qu'il existe alors d'autres alternatives. En voici quelques autres.
>>> pi = 3.141593
>>> print("pi =", pi)    
pi = 3.141593
>>> print("pi = " + str(pi))    
pi = 3.141593
>>> print(f"pi = {pi}")    
pi = 3.141593
>>> print("pi = %f" % (pi))
pi = 3.141593
>>>
d'autres fonctions permettent aussi de transformer une donnée numérique en une chaîne de caractères. Nous les avions vu lors de l'étude des valeurs entières : bin, hex et oct. Elles permettent de produire une chaîne en utilisant une base numérique particulière.

Travaux pratiques

L'énoncé

Vous devez écrire un programme qui permet de retrouver une valeur aléatoire comprise entre 1 et 100 en proposant successivement plusieurs valeurs. Quand l'utilisateur aura retrouvé la valeur, le programme devra le féliciter et lui indiquer le nombre de coups qui auront été nécessaires. Ensuite, le programme demande à l'utilisateur s'il veut effectuer une nouvelle partie.

Voici un exemple d'exécution qui, je l'espère, vous permettra de mieux comprendre l'objectif de l'exercice.

Bienvenue sur MegaGame V1.0 :-)
Veuillez saisir une valeur (1..100) : 50
La valeur à trouver est plus grande !
Veuillez saisir une valeur (1..100) : 75
La valeur à trouver est plus grande !
Veuillez saisir une valeur (1..100) : 87
La valeur à trouver est plus petite !
Veuillez saisir une valeur (1..100) : 81
La valeur à trouver est plus grande !
Veuillez saisir une valeur (1..100) : 84
Gagne en 5 coup(s) !
Voulez-vous recommencer (oui, non) : oui
Veuillez saisir une valeur (1..100) : 50
La valeur à trouver est plus petite !
Veuillez saisir une valeur (1..100) : 25
La valeur à trouver est plus grande !
Veuillez saisir une valeur (1..100) : 37
La valeur à trouver est plus grande !
Veuillez saisir une valeur (1..100) : 43
Gagne en 4 coup(s) !
Voulez-vous recommencer (oui, non) : non
Bye bye

Bien entendu, vous avez une question : comment calculer une valeur aléatoire en Python ? Même s'il y aurait d'autres solutions, je vous propose, pour le moment, d'utiliser la fonction random définie dans le module du même nom. Elle calcule une valeur flottante comprise entre 0 et 1 (1 non inclue). Voici un exemple d'utilisation.

>>> from random import random
>>> random()
0.09258745967872983
>>> random()
0.9682363653229356
>>> random()
0.5232013631247621
>>>
la première occurrence du mot random, dans l'instruction from ci-dessus, correspond au nom de module de code Python à charger. La seconde occurrence correspond au nom de la fonction.

Bon courage et, bien entendu, essayez de faire l'exercice sans regarder directement la correction ci-dessous. ;-)

La correction

Voici ma proposition de code.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
from random import random

print("Bienvenue sur MegaGame V1.0 :-)")

is_running = True
while is_running: 
    # On demande un entier aléatoire entre 1 et 100 compris.
    random_value = 1 + int(random() * 100)
    # Cette ligne permet de mettre au point le programme. Commentez là à la fin.
    print("Valeur aléatoire choisie : " + str(random_value))
    
    # On définit quelques variables
    score = 0
    value = -1
    
    # Tant que l'entier aléatoire n'a pas été trouvé.
    while value != random_value:
        # On demande la saisie d'un entier à partir de la console.
        value = int(input("Veuillez saisir une valeur (1..100) : "))
        score += 1

        # On compare l'entier saisi avec la valeur aléatoire.
        if value < random_value:
            print("La valeur à trouver est plus grande !")
        elif value > random_value:
            print("La valeur à trouver est plus petite !")
        else:
            print("Gagné en", score, "coup(s) !")

    # On demande si l'utilisateur veut une nouvelle partie.
    retry = input("Voulez-vous recommencer (oui, non) : ").lower()
    if  retry == "non":
        is_running = False
        
print("Bye bye")
Fichier MegaGame.py : un petit jeu nécessitant des conversions de types.
je vous ai proposé d'utiliser la fonction random car je voulais pouvoir convertir une valeur flottante en un entier. Pour autant, nous aurions pu directement utiliser la fonction randint qui calcule une valeur entière comprise entre les bornes spécifiées (bornes incluses). Par exemple, randint(1, 100).
Les booléens Spécifier le type des variables