Entrée non textuelle

Objectifs

  • Savoir récupérer des informations non textuelles ;

  • Savoir convertir du texte.

Mise en situation

Les données attendues lors d'une lecture de l'entrée standard ne sont pas toujours des chaînes de caractères. Il faut alors convertir l'information en nombre, booléen, date, etc.

L'entrée standard permet de récupérer les phrases écrites par l'utilisateur, c'est-à-dire des chaînes de caractères. Pourtant, si l'on veut obtenir son âge et que celui-ci est récupéré dans une chaîne de caractères, les opérations sur celui-ci, comme des additions, des comparaisons, etc., ne donneront pas le résultat escompté.

Il est donc nécessaire de convertir le résultat d'une lecture dans ce cas.

DéfinitionConversion

Convertir un élément permet de changer son type, comme transformer un chiffre en chaîne de caractères, ou inversement une chaîne en chiffre.

RappelTypes

Le type d'un élément est en quelque sorte sa nature :

  • un nombre (entier, décimal, etc.),

  • une string (chaîne de caractères),

  • un booléen (vrai ou faux),

  • une date,

  • etc.

SyntaxeConvertir une valeur

  • En JavaScript, on peut convertir un élément grâce aux fonctions String(), Boolean(), Number(), Date(), etc.

  • En Python, on dispose des fonctions int(), float(), str(), etc.

Exemple

1
"""Python."""
2
number = '42'
3
print(type(number)) # affiche le type 'str'
4
5
number = int(number) # transforme la chaîne en entier
6
print(type(number)) # affiche le type 'int'
1
/** JavaScript */
2
let number = '42'
3
console.log(typeof number) // affiche 'string'
4
5
number = Number(number) // transforme la chaîne en nombre
6
console.log(typeof number) // affiche 'number'

AttentionNot a Number

Il faut toujours partir du principe qu'une entrée d'un utilisateur peut être erronée et ne pas correspondre à ce qui est attendu, comme lire une lettre alors que l'on demande un chiffre.

Il faut donc vérifier les entrées lorsqu'une conversion en nombre suit.

  • 1ère approche : on convertit puis on vérifie le résultat.

  • 2ème approche : on teste si la variable est convertible, et on convertit seulement si c'est le cas.

ExempleDemande d'un entier

En Python, voici comment utiliser l'approche n°2 : on teste d'abord la chaîne avec isnumeric() qui retourne True ou False. Si c'est True , on peut convertir.

1
"""Python."""
2
age = input('Votre âge : ')
3
4
if not age.isnumeric():
5
  print('Réponse erronée')
6
else:
7
  print(age)

En JavaScript, voici comment utiliser l'approche n°2 : on teste si la chaîne représente un nombre avec la fonction isNaN(). Cette fonction renvoie true si la valeur testée n'est pas un nombre (Not a Number).

On la convertit ensuite avec la fonction Number().

1
/** JavaScript */
2
let age = prompt('Votre âge :')
3
4
if (!isNaN(age)) {
5
  age = Number(age)
6
  console.log(age)
7
} else {
8
  console.log('Réponse erronée !')
9
}
10

ExempleDemande d'une date

En Python, la fonction strptime (string parse time) prend deux arguments : la chaîne à convertir et le format dans lequel elle est écrite.

En JavaScript, la classe Date peut transformer une chaîne AAAA-MM-JJ, par défaut, en date.

Les manipulations de date sont très sensibles aux formats.

1
"""Python: convertit la réponse en date."""
2
import time
3
4
birthday = input('Quelle est votre date de naissance? (JJ MM AAAA)\n')
5
6
print(time.strptime(birthday, '%d %m %Y')) # format %d %m %Y = JJ MM AAAA
1
/** JavaScript: convertit la réponse en date */
2
let birthday = prompt('Quelle est votre date de naissance? (AAAA-MM-JJ)')
3
4
console.log(Date(birthday))

À retenir

La conversion permet, lors de la lecture d'une entrée, d'adapter la valeur obtenue à l'usage que l'on veut en faire.