Informatique Pour Tous page 2/8 PCSI1 2014-2015
return result
ou bien (en intension)
def smul(n,l) :
return [n*l[i] for i in range(len(l))]
II-Extrait du sujet IPT Mines-Ponts 2015 :
Une liaison série asynchrone permet la communication entre la carte de commande/acquisition et un PC.
Les échantillons correspondant à une mesure sont envoyés par la carte électronique sous la forme d’une
trame (suite de caractères ASCII). Cette suite de caractères se présente sous la forme suivante :
•
••
• un entête qui permet d’identifier la mesure sur un caractère (‘U’ tension moteur, ‘I’ courant moteur, ‘P’
position absolue) ;
•
••
• le nombre de données envoyées (3 caractères) ;
•
••
• les données constituées des mesures brutes codées à l’aide du caractère ‘+’ ou ‘–‘ suivi de 3 caractères
pour la valeur absolue ;
•
••
• un checksum, somme des valeurs absolues des données précédentes modulo 10000 sur 4 caractères. Le
nombre de données transmises n’est pas inclus dans le checksum.
Exemple :mesure de la tension sur 5 échantillons.
Caractères reçus : « U005+012+004–023–002+0420083 »
1) Écrire en langage Python une fonction lect_mesures à un paramètre de type chaîne de caractères de
la forme définie ci-dessus, qui retourne une liste contenant : le type de la mesure codé sur un caractère
(‘U’, ‘I’ ou ‘P’), une liste contenant l’ensemble des valeurs des mesures reçues, enfin le checksum sous
forme numérique.
Exemple : lect_mesures(‘U005+012+004–023–002+0420083’) renvoie [‘U’,[12,4,–23,–
2,42],83]
def lect_mesures(c) :
result=[c[0]] # le premier élément du résultat est le
premier élément de la chaine c
nb_mes = int(c[1:4]) # on récupère le nombre de mesures
mesures=[] # on prépare la liste des mesures
for i in range(nb_mes) :
mesures.append(int(c[i*4+4:i*4+8]))
result.append(mesures) # on ajoute la liste des mesures à la
liste résultat
result.append(int(c[4*(nb_mes+1):])) # on rajoute le checksum
return result