python

Retrouver tous les sujets résolus.
Répondre
samuel

python

Message par samuel » jeu. 31 mars 2022 17:47

Bonjour

Quand je rentre
ligne="nom,prenom,age,25"
print(len(ligne))

sur Python (trinket) je ne comprends pas pourquoi ca me sort 17...
Pourriez vous me dire svp ?

Meric
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: python

Message par sos-math(21) » jeu. 31 mars 2022 18:23

Bonjour,
Cela te donne la longueur de la chaîne de caractères, virgules et espaces comprises.
Donc c’est normal d’avoir 17 caractères.
Bonne continuation
samuel

Re: python

Message par samuel » jeu. 31 mars 2022 19:52

Bonsoir
Merci
Le pb c'est que j'ai un grand nombre de scripts comme ceci qui sont inconnus pour moi et je ne comprends pas... Est ce que je peux vous demander quand meme de l'aide ou non ?

Il y a par exemple celui ci
ligne="nom,prenom,age,25"
print(ligne[1])
print(ligne[3])
print(ligne[5+4])
qui fait
o
,
m

Merci beaucoup
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: python

Message par sos-math(21) » jeu. 31 mars 2022 20:34

Bonjour,
ton script considère la variable ligne qui est de type chaine de caractères (string en python).
Cette variable est constituée de 17 caractères qui sont repérées par des indices : ce sont des nombres indiquant leur ordre dans la chaine.
En Python, les chaines, comme les listes, sont indexées à partir de 0. Ici, les 17 éléments de ta variable ligne sont donc indexés de 0 à 16 :
ligne[0] : premier caractère donc c'est le n
ligne[1] : deuxième caractère donc c'est le o
ligne[3] : quatrième caractère donc c'est la virgule
ligne[5+4] donc ligne[9] donc c'est le dixième caractère, donc c'est bien le m.
Est-ce plus clair ?
samuel

Re: python

Message par samuel » jeu. 31 mars 2022 20:44

oui merci j'ai compris
j'ai une petite interrogation : comment savoir si les mots vont apparaitre entre " " ?
par exemple ici il y en a

ligne="nom,prenom,age,25"
element=ligne.split(",")
print(element[3],element[1])
print(element[2],element[0])

mais pas ici

ligne="nom,prenom,age,25"
element=ligne.split(",")
print(element[1])
print(element[3])
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: python

Message par sos-math(21) » jeu. 31 mars 2022 20:52

Bonjour,
je ne comprends pas ta remarque. La méthode split divise une chaine en liste selon un séparateur spécifié, ici c'est la virgule.
Ce qui donne la liste element :

Code : Tout sélectionner

>>>element
['nom', 'prenom', 'age', '25']
Donc si tu appelles les différents éléments de cette liste, tu as :

Code : Tout sélectionner

>>> ligne="nom,prenom,age,25"

>>> element=ligne.split(",")

>>> print(element[3],element[1])
25 prenom

>>> print(element[2],element[0])
age nom

>>> ligne="nom,prenom,age,25"

>>> element=ligne.split(",")

>>> print(element[1])
prenom

>>> print(element[3]) 
25

Donc il n'y a pas de problème de mon côté.
Qu'entends-tu par
mais pas ici
?
samuel

Re: python

Message par samuel » jeu. 31 mars 2022 20:53

Il y a un script ou les résultats sortent entre guillements et l'autre non
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: python

Message par sos-math(21) » jeu. 31 mars 2022 21:02

Tu es sûr ?
Tu as fait le test sur une même machine ?
Cela peut dépendre de ton environnement Python et de ce que tu appelles :

Code : Tout sélectionner

>>> element[1] # demande de la valeur de la variable, c'est bien un objet de type str donc entre guillemets
 'prenom'

>>> print(element[1]) # affiche le contenu de la variable donc objet de type Nonetype
prenom

>>> type(element[1])
str

>>> type(print(element[1]))
prenom
NoneType
Bonne continuation
samuel

Re: python

Message par samuel » jeu. 31 mars 2022 21:03

Ok merci bcp.

Il me reste 3 exercices à faire.

Le 1er c'est :
Vous devez modifiez le script n°2 de manière à afficher la valeur de votre âge multipliée par 1,5 en utilisant le champ correspondant (ceci signifie qu’il faut travailler avec des champs séparés).
Script 2 :
ligne="nom,prenom,age,25"
element=ligne.split(",")
print(element)

Je suis perdu, je ne sais pas du tout comment multiplé par 1.5 notamment...
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: python

Message par sos-math(21) » jeu. 31 mars 2022 21:08

Il faut que tu appelles l'élément de ta liste qui contient ton âge et que tu le convertisses en entier et que tu multiplies cet élément par 1,5 :

Code : Tout sélectionner

ligne="nom,prenom,age,25"
element=ligne.split(",")
element[3] = 1.5 * int(element[3])
print(element)

ce qui te donne la sortie suivante :

Code : Tout sélectionner

['nom', 'prenom', 'age', 37.5]
Tu notes au passage que l'âge est désormais de type entier (type int) et il n'y a donc plus de guillemets autour de l'âge.
Bonne continuation
samuel

Re: python

Message par samuel » jeu. 31 mars 2022 21:13

Merci, j'ai testé et réussi.

Avant dernier exercice :
Sur la base du script n°3, écrivez votre nom, prénom et âge dans le code (c’est à dire dans le script), tout en conservant l’ordre de ces données. Modifiez son contenu de manière à afficher vos initiales en commençant par celle du prénom, ainsi que la valeur de votre âge (sans que le terme age ne soit apparent), après avoir renommé la variable element en variable champs.
script 3 :
ligne="nom,prenom,age,25"
element=ligne.split(",")
a=element[0]
b=element[1]
c=element[2]
d=element[3]

C'est vraiment compliqué, merci et désolé. J'ai fais déjà "écrivez votre nom, prénom et âge dans le code (c’est à dire dans le script), tout en conservant l’ordre de ces données"
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: python

Message par sos-math(21) » jeu. 31 mars 2022 21:23

Je ne comprends pas le rôle du 25 dans cette chaîne : c'est l'âge ?
Si tu considères ce script initial

Code : Tout sélectionner

ligne="Durand,Rémi,age,17"
element=ligne.split(",")
a=element[0]
b=element[1]
c=element[2]
d=element[3]

il faut que tu changes le premier élément en son initiale et la même chose pour le deuxième élément, ainsi que l'âge. Tu redéfinis ensuite ta liste élément :

Code : Tout sélectionner

a = a[0]
b = b[0]
element = [b,a,d]
print(element)
Ce qui donne :

Code : Tout sélectionner

['R', 'D', '17']
Je ne sais pas si c'est cela qui est demandé...
samuel

Re: python

Message par samuel » ven. 1 avr. 2022 10:08

Je pense que c'est ca.
J'ai un dernier exo :
Sur la base du script n°3, affichez sur une même ligne l’attribut prenom à 4 reprises sans espace, et la division de la valeur de l’âge par 2
Une conversion est à prévoir, à vous de l’identifier...
script 3 :
ligne="nom,prenom,age,25"
element=ligne.split(",")
a=element[0]
b=element[1]
c=element[2]
d=element[3]

j'ai réussi à afficher l'attribut prénom 4 fois mais je n'arrive pas à faire al division...comment faire une conversion ?
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: python

Message par sos-math(21) » ven. 1 avr. 2022 11:16

Bonjour,
il s'agit de la même conversion de type que dans un exercice précédent : il faut d'abord convertir l'âge en entier avant d'en prendre la moitié. Pour la répétition de la chaine, il suffit de faire *4

Code : Tout sélectionner

ligne="Durand,Rémi,age,25"
element=ligne.split(",")
a=element[0]
b=element[1]
c=element[2]
d=element[3]
print(b*4, int(d)/2)

ce qui donne

Code : Tout sélectionner

RémiRémiRémiRémi 12.5
Je ne sais pas si c'est ce qui est demandé mais c'est une réponse qui s'en approche.
Bonne continuation
Répondre