Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Saisie simple d'une variable

9 réponses
Avatar
Fabrice
Bonjour,

toujours à la recherche d'explications simples pour enseigner
l'algorihmique en seconde, voici la situation.

Je suis avec Python 3 et débutant en python ;-).

J'avais entré :
x=0.0
x=input("entrer x :")

ancien programmeur C++, je croyais que la chaine retournée par input
serait transtypée en flottant.
Non, c'est la variable qui change de type ! (je trouve cela illogique).

Du coup, pour m'en sortir, je fais :

x=float(input("entrer x :"))

qui surprendra les élèves qui n'ont pas eu de cours sur les types (cours
que je trouve hors programme).

y a-t-il plus simple ?

Merci,
Fabrice.

9 réponses

Avatar
jmfauth
On 11 sep, 09:00, Fabrice wrote:
Bonjour,

toujours la recherche d'explications simples pour enseigner
l'algorihmique en seconde, voici la situation.

Je suis avec Python 3 et d butant en python ;-).

J'avais entr :
x=0.0
x=input("entrer x :")

ancien programmeur C++, je croyais que la chaine retourn e par input
serait transtyp e en flottant.
Non, c'est la variable qui change de type ! (je trouve cela illogique).

Du coup, pour m'en sortir, je fais :

x=float(input("entrer x :"))

qui surprendra les l ves qui n'ont pas eu de cours sur les types (cours
que je trouve hors programme).

y a-t-il plus simple ?

Merci,
Fabrice.



En Python 3, input() renvoie toujours un string (en 5 lettres),
une chaîne de caractères de type <str>, en fait un unicode
abstrait composé de points de code.
Après, on en fait ce que l'on veut.


s = input('abc:')






abc:éléphant
type(s)






<class 'str'>
s = input('nombre:')






nombre:3.1416
type(s)






<class 'str'>
x = float(s)
print(x)






3.1416
type(x)






<class 'float'>









Prédéfinir "x = 0.0" n'a aucun sens, car en Python les
variables sont dynamiquement typées.

Un

x = 0.0
x = input('blabla:')






blabla:abc








revient à

x = 0.0
x = 'abc'








---------

Configure ta messagerie correctement, tous les caractères
non ascii ne sont pas affichés. Semble d'ailleurs ëtre le cas
pour la majorité des intervenants.

jmf
Avatar
Fabrice
Le 11/09/2011 09:37, jmfauth a écrit :

Prédéfinir "x = 0.0" n'a aucun sens, car en Python les
variables sont dynamiquement typées.

Un

x = 0.0
x = input('blabla:')






blabla:abc








revient à

x = 0.0
x = 'abc'










Mais c'est horrible ;-) Cela va à l'encontre de tous les langages que
j'ai appris ! Et à l'encontre des maths...

---------

Configure ta messagerie correctement, tous les caractères
non ascii ne sont pas affichés. Semble d'ailleurs ëtre le cas
pour la majorité des intervenants.

jmf




Là je te taquine un peu :
Je vois tous les messages avec les accents dans ce groupe comme dans
d'autres que je fréquente depuis plus de 4 ans.
J'utilise Thunderbird sous Ubuntu et sous windows avec les mêmes résultats.
Si la majorité des intervants a ce souci, Ce pourrait-il que ce soit
plutôt ta messagerie qui est mal configurée ou ton lecteur qui ne lit
pas le codage du message ?

cordialement et merci pour ta réponse,
Fabrice.
Avatar
jmfauth
On 11 sep, 10:07, Fabrice wrote:

...

Mais c'est horrible ;-) Cela va à l'encontre de tous les langages que
j'ai appris ! Et à l'encontre des maths...





Comme je l'ai dit, Python est fortement typé, mais
*dynamiquement* typé. Ce sont les litéraux qui vont
définir le type d'une variable, ex 123 -> int,
123.0 (ou 123.) -> float, b'asdf' -> bytes, etc.

Sur un mode humoristique je répondrais ceci.

Il doit y avoir au moins 2456843 fils de discussion
à ce sujet (si ce n'est plus), généralement émanents
des utilisateurs Python les moins expérimentés.

La conclusion est assez limpide. Python travaille
comme cela. Amen. C'est une façon de faire qui
permet de travailler vite, bien et correctement
et qui donne satisfaction à bien des utilisateurs.

C'est bigrement efficace, surtout dans un interpréteur
interactif qui est vraiment l'outil idéal et ludique
pour jouer (et même plus) et apprendre Python.

Ceci dit Python possède toute l'artillerie nécessaire
pour palier à ce que certains voient comme un invénient, si
on veut bien les utiliser :
type(), isinstance(), assert, class properties, etc.




Là je te taquine un peu :
Je vois tous les messages avec les accents dans ce groupe comme dans
d'autres que je fréquente depuis plus de 4 ans.
J'utilise Thunderbird sous Ubuntu et sous windows avec les mêmes résu ltats.
Si la majorité des intervants a ce souci, Ce pourrait-il que ce soit
plutôt ta messagerie qui est mal configurée ou ton lecteur qui ne lit
pas le codage du message ?




Je consulte cette liste directement depuis google
groupe via FireFox. Ce que je sais est que, chaque
fois que je fais part de ceci à un intervenant (souvent
un Américain), il arrive à régler ce petit souci.
Ce qui tend à prouver que le problème est du côté
de l'émetteur et non du récepteur.

jmf
Avatar
Laurent Pointal
Fabrice wrote:

Le 11/09/2011 09:37, jmfauth a écrit :

Prédéfinir "x = 0.0" n'a aucun sens, car en Python les
variables sont dynamiquement typées.

Un

x = 0.0
x = input('blabla:')






blabla:abc








revient à

x = 0.0
x = 'abc'










Mais c'est horrible ;-) Cela va à l'encontre de tous les langages que
j'ai appris ! Et à l'encontre des maths...



Comme l'indique jmf, en Python les variables sont dynamiquement typées.

Dans l'esprit Python, ce ne sont pas des variables au sens du C (ie. un
emplacement en mémoire d'une taille donnée), mais des noms qui sont associés
à des valeurs (objets) lors de l'affectation (après on a la notion d'espaces
de noms).

Si tu réfléchis dans cet esprit, le fonctionnement général de Python te sera
plus évident.

C'est vrai que c'est déroutant quand on vient d'autres langages statiquement
typés. Mais c'est aussi l'occasion de demander à tes élèves de se poser les
questions de "qu'est-ce que je manipules", et de faire des transtypages
explicites lorsqu'il y a besoin.

Ca peut aussi servir à introduire une première fonction: input_int()
Et une seconde, input_float()

:-)

A+
Laurent.
Avatar
Fabrice
Le 11/09/2011 11:02, jmfauth a écrit :
On 11 sep, 10:07, Fabrice wrote:

...



Mais c'est horrible ;-) Cela va à l'encontre de tous les langages que
j'ai appris ! Et à l'encontre des maths...



Sur un mode humoristique je répondrais ceci.

Il doit y avoir au moins 2456843 fils de discussion
à ce sujet (si ce n'est plus), généralement émanents
des utilisateurs Python les moins expérimentés.



Et oui, c'est mon cas ;-)

La conclusion est assez limpide. Python travaille
comme cela. Amen. C'est une façon de faire qui
permet de travailler vite, bien et correctement
et qui donne satisfaction à bien des utilisateurs.

C'est bigrement efficace, surtout dans un interpréteur
interactif qui est vraiment l'outil idéal et ludique
pour jouer (et même plus) et apprendre Python.



C'est d'ailleurs pour cette raison que j'ai choisi Python pour initier
mes secondes aux algorithmes : son mode turtle (logo), une présentation
légère et lisible (sans une tonne de début_si, fin_si, début_sinon,
fin_sinon, ...), simple à installer, gratuit et libre, disponible sur
plusieurs systèmes (j'ai deux élèves sous linux et une sous mac).
Je connais pascal, C, C++, assembleur (Z80, M68000 (nostalgie de l'amiga
et de ses demo-parties) et "i80386") mais aucun ne fait l'affaire pour
débuter à 14-15 ans.
Ma première séance avec Python a eu un certain succès et c'est grâce à
son accessibilité.

Ceci dit Python possède toute l'artillerie nécessaire
pour palier à ce que certains voient comme un invénient, si
on veut bien les utiliser :
type(), isinstance(), assert, class properties, etc.




Oui, ainsi, ils le reverront peut-être dans trois ans à l'université...


Là je te taquine un peu :
Je vois tous les messages avec les accents dans ce groupe comme dans
d'autres que je fréquente depuis plus de 4 ans.
J'utilise Thunderbird sous Ubuntu et sous windows avec les mêmes résultats.
Si la majorité des intervants a ce souci, Ce pourrait-il que ce soit
plutôt ta messagerie qui est mal configurée ou ton lecteur qui ne lit
pas le codage du message ?




Je consulte cette liste directement depuis google
groupe via FireFox. Ce que je sais est que, chaque
fois que je fais part de ceci à un intervenant (souvent
un Américain), il arrive à régler ce petit souci.
Ce qui tend à prouver que le problème est du côté
de l'émetteur et non du récepteur.



De la manière dont tu consultes ce groupe, je dirais que c'est Google
qui ne décode pas bien les messages. Chaque message est enregistré avec
un format cité dans son entête. La tendance est à l'utf8 car il permet
de coder toutes les langues. C'est le lecteur qui doit suivre cette
indication.
Dans la chaîne que tu me donnes, le maillon faible est google qui doit
changer le format des messages pour l'afficher à sa manière sur une page
internet.
Si j'utilises l'ascii, je ne peut plus écrire en japonais ;-)

cordialement,
Fabrice.
Avatar
Fabrice
Le 11/09/2011 11:54, Laurent Pointal a écrit :

C'est vrai que c'est déroutant quand on vient d'autres langages statiquement
typés. Mais c'est aussi l'occasion de demander à tes élèves de se poser les
questions de "qu'est-ce que je manipules", et de faire des transtypages
explicites lorsqu'il y a besoin.



Dès que j'aurai un peu avancé : une seule séance pour l'instant.

Ca peut aussi servir à introduire une première fonction: input_int()
Et une seconde, input_float()



Pas bête comme idée ;-)
Je la garde pour le chapitre sur les fonctions (dans pas longtemps).

Dommage qu'il n'y ait plus les ensembles de nombres au programme. Cela
aurait permis de faire deux passages sur cette notion :-(

cordialement,
Fabrice.
Avatar
jmfauth
On 11 sep, 12:04, Fabrice wrote:


De la manière dont tu consultes ce groupe, je dirais que c'est Google
qui ne décode pas bien les messages. Chaque message est enregistré av ec
un format cité dans son entête. La tendance est à l'utf8 car il per met
de coder toutes les langues. C'est le lecteur qui doit suivre cette
indication.
Dans la chaîne que tu me donnes, le maillon faible est google qui doit
changer le format des messages pour l'afficher à sa manière sur une p age
internet.



Je veux bien assumer ma part de responsabilité, mais il faut
bien avouer que je n'ai pas ce problème avec bien des gens
lors que discussions sur le codage des caractères. Comprendre,
toute sorte de caractères.
Ni avec les autres intervenants de cette discussion.
A noter que quand tu réponds à un message tout est en ordre
(l'en-tête étant préservée), mais lorsque tu crées un message cel a
ne l'est pas. Conclusion ...


Si j'utilises l'ascii, je ne peut plus écrire en japonais ;-)



Du japonais avec de l'ascii pur ? Bien sûr que c'est possible,
et heureusement !
Python le fait très aisément ;-)

Bon apprentissage.
jmf
Avatar
Paul Gaborit
À (at) Sun, 11 Sep 2011 13:10:58 -0700 (PDT),
jmfauth écrivait (wrote):

On 11 sep, 12:04, Fabrice wrote:
Dans la chaîne que tu me donnes, le maillon faible est google qui doit
changer le format des messages pour l'afficher à sa manière sur une page
internet.



Je veux bien assumer ma part de responsabilité, mais il faut
bien avouer que je n'ai pas ce problème avec bien des gens
lors que discussions sur le codage des caractères. Comprendre,
toute sorte de caractères.



Et pourtant, Google Groups est connu pour ce bug de suppression des
caractères accentués de *certains* messages usenet, messages
parfaitement valides puisque parfaitement reçus et décodés par les
autres logiciels de lecture de news.

Le problème a même été étudié par des participants des forums usenet
francophones qui ont identifié les conditions du bug et qui l'ont
signalé à Google... mais sans résultat pour l'instant.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
Gabriel AHTUNE
Avec des Try...Except et des tests sur les retours ou exécution de int, f loat, hex tu pourrais cacher l'operation de transtypage et faire une foncti on input universelle ;) sauf si input_int et input_float ont déjà ét é introduites.