Je me lance dans Python.
Pour l'instant, je tape des petits morceaux de scripts pour me
familiariser avec la syntaxe (et geany, l'IDE conseillé par Doug).
J'ai aussi le Swinnen ouvert en PDF pour y glaner des exemples.
Pour vous montrer le niveau, voici un morceau de script:
def surfCercle(r):
"Surface d'un cercle de rayon r"
return pi * r**2
def filter_is_number(LaString):
La_String_To_Return="0"
for character in LaString:
print(character," : ",end="")
if character in [".","0","1","2","3","4","5","6","7","8","9"]:
print("0K, in list",end="")
La_String_To_Return=La_String_To_Return+character
print(", La_String_To_Return =",La_String_To_Return)
else:
print("not in the list")
return La_String_To_Return
rayon = input("Rayon du cercle ? ")
print(type(rayon))
rayon = float(rayon_filtered)
#rayon = float(input("Rayon du cercle ? "))
print("rayon du cercle = ",rayon,"m")
print("surface du cercle =",surfCercle(rayon),"m²")
J'ai bien compris que la réponse à un input est forcément de type string
et évidemment, la ligne 'rayon = float(input("Rayon du cercle ? "))'
plante si l'utilisateur saisi des caractères alphabétiques dans le
rayon.
J'ai donc écrit la fonction filter_is_number pour filter les caractères
de la chaîne saisie et ne laisser passer que le numérique...
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une
fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Et je suis très étonné de n'avoir rien trouvé : mon besoin n'est tout de
même pas très original...
Sans parler du fait que ma fonction doit être une véritable horreur à
vos yeux ;-)
Il doit bien exister une fonction "built in" qui m'aurait permis
d'arriver à mes fins, non ?
def filter_is_number(LaString): La_String_To_Return="0" for character in LaString: print(character," : ",end="") if character in [".","0","1","2","3","4","5","6","7","8","9"]: print("0K, in list",end="") La_String_To_Return=La_String_To_Return+character print(", La_String_To_Return =",La_String_To_Return) else: print("not in the list") return La_String_To_Return
Encore plus horrible (pour ne compter qu'une fois le "."): def filter_is_number(LaString): La_String_To_Return="0" doitonlyonetime=0 for character in LaString: print(character," : ",end="") if character in [".","0","1","2","3","4","5","6","7","8","9"]: print("0K, in list",end="") if character == '.': if not doitonlyonetime: doitonlyonetime=1 print("*** premier point ***",end="") La_String_To_Return=La_String_To_Return+character else: print("*** point déjà pris en compte ***",end="") else: La_String_To_Return=La_String_To_Return+character print(", La_String_To_Return =",La_String_To_Return) else: print("not in the list") return La_String_To_Return
Le 11-02-2019, Lulu <lulu042@fry.fr.invalid> a écrit :
def filter_is_number(LaString):
La_String_To_Return="0"
for character in LaString:
print(character," : ",end="")
if character in [".","0","1","2","3","4","5","6","7","8","9"]:
print("0K, in list",end="")
La_String_To_Return=La_String_To_Return+character
print(", La_String_To_Return =",La_String_To_Return)
else:
print("not in the list")
return La_String_To_Return
Encore plus horrible (pour ne compter qu'une fois le "."):
def filter_is_number(LaString):
La_String_To_Return="0"
doitonlyonetime=0
for character in LaString:
print(character," : ",end="")
if character in [".","0","1","2","3","4","5","6","7","8","9"]:
print("0K, in list",end="")
if character == '.':
if not doitonlyonetime:
doitonlyonetime=1
print("*** premier point ***",end="")
La_String_To_Return=La_String_To_Return+character
else:
print("*** point déjà pris en compte ***",end="")
else:
La_String_To_Return=La_String_To_Return+character
print(", La_String_To_Return =",La_String_To_Return)
else:
print("not in the list")
return La_String_To_Return
def filter_is_number(LaString): La_String_To_Return="0" for character in LaString: print(character," : ",end="") if character in [".","0","1","2","3","4","5","6","7","8","9"]: print("0K, in list",end="") La_String_To_Return=La_String_To_Return+character print(", La_String_To_Return =",La_String_To_Return) else: print("not in the list") return La_String_To_Return
Encore plus horrible (pour ne compter qu'une fois le "."): def filter_is_number(LaString): La_String_To_Return="0" doitonlyonetime=0 for character in LaString: print(character," : ",end="") if character in [".","0","1","2","3","4","5","6","7","8","9"]: print("0K, in list",end="") if character == '.': if not doitonlyonetime: doitonlyonetime=1 print("*** premier point ***",end="") La_String_To_Return=La_String_To_Return+character else: print("*** point déjà pris en compte ***",end="") else: La_String_To_Return=La_String_To_Return+character print(", La_String_To_Return =",La_String_To_Return) else: print("not in the list") return La_String_To_Return
yves
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit: Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît") @+ -- Yves
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit:
Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une
fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except :
rayon = input("Rayon du cercle ? ")
try:
float(rayon)
except ValueError:
print("Saisissez un nombre, s'il vous plaît")
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit: Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît") @+ -- Yves
Benoit Izac
Bonjour, Le 11/02/2019 à 17:48, Lulu a écrit dans le message :
#! /usr/bin/python3 # -*- coding: utf-8 -*-
^^^^^^^^^^^^^^^^^^^^^^^ Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise mais c'est inutile pour python.
print("n Hellllllllo world !!!!!!n") from math import *
from math import pi
def surfCercle(r): "Surface d'un cercle de rayon r" return pi * r**2 def filter_is_number(LaString): La_String_To_Return="0" for character in LaString: print(character," : ",end="") if character in [".","0","1","2","3","4","5","6","7","8","9"]: print("0K, in list",end="") La_String_To_Return=La_String_To_Return+character print(", La_String_To_Return =",La_String_To_Return) else: print("not in the list") return La_String_To_Return
On peut faire plus simple et plus lisible : def filter_is_number(s): return ''.join([c for c in s if c in '.0123456789'])
[...] J'ai bien compris que la réponse à un input est forcément de type string et évidemment, la ligne 'rayon = float(input("Rayon du cercle ? "))' plante si l'utilisateur saisi des caractères alphabétiques dans le rayon. J'ai donc écrit la fonction filter_is_number pour filter les caractères de la chaîne saisie et ne laisser passer que le numérique... Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur. Et je suis très étonné de n'avoir rien trouvé : mon besoin n'est tout de même pas très original... Sans parler du fait que ma fonction doit être une véritable horreur à vos yeux ;-)
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Il doit bien exister une fonction "built in" qui m'aurait permis d'arriver à mes fins, non ?
Pas à ma connaissance, try/except comme te l'a suggéré Yves me semble la façon la plus simple. -- Benoit Izac
Bonjour,
Le 11/02/2019 à 17:48, Lulu a écrit dans le message
<slrnq639rl.vqc.lulu042@Minty.Rock-n-Roll.org> :
#! /usr/bin/python3
# -*- coding: utf-8 -*-
^^^^^^^^^^^^^^^^^^^^^^^
Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise
mais c'est inutile pour python.
print("n Hellllllllo world !!!!!!n")
from math import *
from math import pi
def surfCercle(r):
"Surface d'un cercle de rayon r"
return pi * r**2
def filter_is_number(LaString):
La_String_To_Return="0"
for character in LaString:
print(character," : ",end="")
if character in [".","0","1","2","3","4","5","6","7","8","9"]:
print("0K, in list",end="")
La_String_To_Return=La_String_To_Return+character
print(", La_String_To_Return =",La_String_To_Return)
else:
print("not in the list")
return La_String_To_Return
On peut faire plus simple et plus lisible :
def filter_is_number(s):
return ''.join([c for c in s if c in '.0123456789'])
[...]
J'ai bien compris que la réponse à un input est forcément de type string
et évidemment, la ligne 'rayon = float(input("Rayon du cercle ? "))'
plante si l'utilisateur saisi des caractères alphabétiques dans le
rayon.
J'ai donc écrit la fonction filter_is_number pour filter les caractères
de la chaîne saisie et ne laisser passer que le numérique...
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une
fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Et je suis très étonné de n'avoir rien trouvé : mon besoin n'est tout de
même pas très original...
Sans parler du fait que ma fonction doit être une véritable horreur à
vos yeux ;-)
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou
un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche
pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter
derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Il doit bien exister une fonction "built in" qui m'aurait permis
d'arriver à mes fins, non ?
Pas à ma connaissance, try/except comme te l'a suggéré Yves me semble la
façon la plus simple.
Bonjour, Le 11/02/2019 à 17:48, Lulu a écrit dans le message :
#! /usr/bin/python3 # -*- coding: utf-8 -*-
^^^^^^^^^^^^^^^^^^^^^^^ Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise mais c'est inutile pour python.
print("n Hellllllllo world !!!!!!n") from math import *
from math import pi
def surfCercle(r): "Surface d'un cercle de rayon r" return pi * r**2 def filter_is_number(LaString): La_String_To_Return="0" for character in LaString: print(character," : ",end="") if character in [".","0","1","2","3","4","5","6","7","8","9"]: print("0K, in list",end="") La_String_To_Return=La_String_To_Return+character print(", La_String_To_Return =",La_String_To_Return) else: print("not in the list") return La_String_To_Return
On peut faire plus simple et plus lisible : def filter_is_number(s): return ''.join([c for c in s if c in '.0123456789'])
[...] J'ai bien compris que la réponse à un input est forcément de type string et évidemment, la ligne 'rayon = float(input("Rayon du cercle ? "))' plante si l'utilisateur saisi des caractères alphabétiques dans le rayon. J'ai donc écrit la fonction filter_is_number pour filter les caractères de la chaîne saisie et ne laisser passer que le numérique... Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur. Et je suis très étonné de n'avoir rien trouvé : mon besoin n'est tout de même pas très original... Sans parler du fait que ma fonction doit être une véritable horreur à vos yeux ;-)
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Il doit bien exister une fonction "built in" qui m'aurait permis d'arriver à mes fins, non ?
Pas à ma connaissance, try/except comme te l'a suggéré Yves me semble la façon la plus simple. -- Benoit Izac
Lulu
Le 11-02-2019, Benoit Izac a écrit :
Bonjour, Le 11/02/2019 à 17:48, Lulu a écrit dans le message :
#! /usr/bin/python3 # -*- coding: utf-8 -*-
^^^^^^^^^^^^^^^^^^^^^^^ Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise mais c'est inutile pour python.
print("n Hellllllllo world !!!!!!n") from math import *
from math import pi
Oui.
def surfCercle(r): "Surface d'un cercle de rayon r" return pi * r**2 def filter_is_number(LaString): La_String_To_Return="0" for character in LaString: print(character," : ",end="") if character in [".","0","1","2","3","4","5","6","7","8","9"]: print("0K, in list",end="") La_String_To_Return=La_String_To_Return+character print(", La_String_To_Return =",La_String_To_Return) else: print("not in the list") return La_String_To_Return
On peut faire plus simple et plus lisible : def filter_is_number(s): return ''.join([c for c in s if c in '.0123456789'])
Plus lisible ? J'ai googlé la méthode 'join', mais ta ligne reste obscure. Peux-tu expliquer comment ça marche ?
[...] J'ai bien compris que la réponse à un input est forcément de type string et évidemment, la ligne 'rayon = float(input("Rayon du cercle ? "))' plante si l'utilisateur saisi des caractères alphabétiques dans le rayon. J'ai donc écrit la fonction filter_is_number pour filter les caractères de la chaîne saisie et ne laisser passer que le numérique... Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur. Et je suis très étonné de n'avoir rien trouvé : mon besoin n'est tout de même pas très original... Sans parler du fait que ma fonction doit être une véritable horreur à vos yeux ;-)
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Effectivement, je n'avais pas pensé au '1e2'. J'ai corrigé le cas de la multiple occurrence du '.'
Il doit bien exister une fonction "built in" qui m'aurait permis d'arriver à mes fins, non ?
Pas à ma connaissance, try/except comme te l'a suggéré Yves me semble la façon la plus simple.
Je vais la tester de ce pas.
Le 11-02-2019, Benoit Izac <use.reply.to@INVALID.ADDRESS> a écrit :
Bonjour,
Le 11/02/2019 à 17:48, Lulu a écrit dans le message
<slrnq639rl.vqc.lulu042@Minty.Rock-n-Roll.org> :
#! /usr/bin/python3
# -*- coding: utf-8 -*-
^^^^^^^^^^^^^^^^^^^^^^^
Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise
mais c'est inutile pour python.
print("n Hellllllllo world !!!!!!n")
from math import *
from math import pi
Oui.
def surfCercle(r):
"Surface d'un cercle de rayon r"
return pi * r**2
def filter_is_number(LaString):
La_String_To_Return="0"
for character in LaString:
print(character," : ",end="")
if character in [".","0","1","2","3","4","5","6","7","8","9"]:
print("0K, in list",end="")
La_String_To_Return=La_String_To_Return+character
print(", La_String_To_Return =",La_String_To_Return)
else:
print("not in the list")
return La_String_To_Return
On peut faire plus simple et plus lisible :
def filter_is_number(s):
return ''.join([c for c in s if c in '.0123456789'])
Plus lisible ?
J'ai googlé la méthode 'join', mais ta ligne reste obscure.
Peux-tu expliquer comment ça marche ?
[...]
J'ai bien compris que la réponse à un input est forcément de type string
et évidemment, la ligne 'rayon = float(input("Rayon du cercle ? "))'
plante si l'utilisateur saisi des caractères alphabétiques dans le
rayon.
J'ai donc écrit la fonction filter_is_number pour filter les caractères
de la chaîne saisie et ne laisser passer que le numérique...
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une
fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Et je suis très étonné de n'avoir rien trouvé : mon besoin n'est tout de
même pas très original...
Sans parler du fait que ma fonction doit être une véritable horreur à
vos yeux ;-)
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou
un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche
pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter
derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Effectivement, je n'avais pas pensé au '1e2'.
J'ai corrigé le cas de la multiple occurrence du '.'
Il doit bien exister une fonction "built in" qui m'aurait permis
d'arriver à mes fins, non ?
Pas à ma connaissance, try/except comme te l'a suggéré Yves me semble la
façon la plus simple.
Bonjour, Le 11/02/2019 à 17:48, Lulu a écrit dans le message :
#! /usr/bin/python3 # -*- coding: utf-8 -*-
^^^^^^^^^^^^^^^^^^^^^^^ Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise mais c'est inutile pour python.
print("n Hellllllllo world !!!!!!n") from math import *
from math import pi
Oui.
def surfCercle(r): "Surface d'un cercle de rayon r" return pi * r**2 def filter_is_number(LaString): La_String_To_Return="0" for character in LaString: print(character," : ",end="") if character in [".","0","1","2","3","4","5","6","7","8","9"]: print("0K, in list",end="") La_String_To_Return=La_String_To_Return+character print(", La_String_To_Return =",La_String_To_Return) else: print("not in the list") return La_String_To_Return
On peut faire plus simple et plus lisible : def filter_is_number(s): return ''.join([c for c in s if c in '.0123456789'])
Plus lisible ? J'ai googlé la méthode 'join', mais ta ligne reste obscure. Peux-tu expliquer comment ça marche ?
[...] J'ai bien compris que la réponse à un input est forcément de type string et évidemment, la ligne 'rayon = float(input("Rayon du cercle ? "))' plante si l'utilisateur saisi des caractères alphabétiques dans le rayon. J'ai donc écrit la fonction filter_is_number pour filter les caractères de la chaîne saisie et ne laisser passer que le numérique... Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur. Et je suis très étonné de n'avoir rien trouvé : mon besoin n'est tout de même pas très original... Sans parler du fait que ma fonction doit être une véritable horreur à vos yeux ;-)
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Effectivement, je n'avais pas pensé au '1e2'. J'ai corrigé le cas de la multiple occurrence du '.'
Il doit bien exister une fonction "built in" qui m'aurait permis d'arriver à mes fins, non ?
Pas à ma connaissance, try/except comme te l'a suggéré Yves me semble la façon la plus simple.
Je vais la tester de ce pas.
Lulu
Le 11-02-2019, yves a écrit :
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit: Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Le 11-02-2019, yves <yves@free.invalid> a écrit :
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit:
Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une
fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except :
rayon = input("Rayon du cercle ? ")
try:
float(rayon)
except ValueError:
print("Saisissez un nombre, s'il vous plaît")
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit: Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Lulu
Le 11-02-2019, Lulu a écrit :
Le 11-02-2019, yves a écrit :
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit: Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah... Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon script allait revenir de lui-même à la ligne qui demande un nombre... Mais non, j'ai juste le message d'erreur et mon script plante puisque la chaîne saisie contenait un caractère alphabétique ;-( Il faudrait mettre ça dans une boucle, mais je n'en voie pas a structure. Any help ?
Le 11-02-2019, Lulu <lulu042@fry.fr.invalid> a écrit :
Le 11-02-2019, yves <yves@free.invalid> a écrit :
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit:
Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une
fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except :
rayon = input("Rayon du cercle ? ")
try:
float(rayon)
except ValueError:
print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah...
Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon
script allait revenir de lui-même à la ligne qui demande un nombre...
Mais non, j'ai juste le message d'erreur et mon script plante puisque la
chaîne saisie contenait un caractère alphabétique ;-(
Il faudrait mettre ça dans une boucle, mais je n'en voie pas a
structure.
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit: Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah... Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon script allait revenir de lui-même à la ligne qui demande un nombre... Mais non, j'ai juste le message d'erreur et mon script plante puisque la chaîne saisie contenait un caractère alphabétique ;-( Il faudrait mettre ça dans une boucle, mais je n'en voie pas a structure. Any help ?
Lulu
Le 11-02-2019, Lulu a écrit :
Le 11-02-2019, yves a écrit :
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit: Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah... Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon script allait revenir de lui-même à la ligne qui demande un nombre... Mais non, j'ai juste le message d'erreur et mon script plante puisque la chaîne saisie contenait un caractère alphabétique ;-( Il faudrait mettre ça dans une boucle, mais je n'en voie pas la structure. Any help ?
Le 11-02-2019, Lulu <lulu042@fry.fr.invalid> a écrit :
Le 11-02-2019, yves <yves@free.invalid> a écrit :
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit:
Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une
fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except :
rayon = input("Rayon du cercle ? ")
try:
float(rayon)
except ValueError:
print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah...
Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon
script allait revenir de lui-même à la ligne qui demande un nombre...
Mais non, j'ai juste le message d'erreur et mon script plante puisque la
chaîne saisie contenait un caractère alphabétique ;-(
Il faudrait mettre ça dans une boucle, mais je n'en voie pas la
structure.
Le Mon, 11 Feb 2019 17:48:53 +0100, Lulu a écrit: Bonjour,
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah... Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon script allait revenir de lui-même à la ligne qui demande un nombre... Mais non, j'ai juste le message d'erreur et mon script plante puisque la chaîne saisie contenait un caractère alphabétique ;-( Il faudrait mettre ça dans une boucle, mais je n'en voie pas la structure. Any help ?
Benoit Izac
Bonjour, Le 11/02/2019 à 23:26, Lulu a écrit dans le message :
def filter_is_number(s): return ''.join([c for c in s if c in '.0123456789'])
Plus lisible ? J'ai googlé la méthode 'join', mais ta ligne reste obscure. Peux-tu expliquer comment ça marche ?
Il faut regarder la fonction join dans la classe str (« '' » est de type str). pydoc str.join Pour la compréhension de liste, continue ton apprentissage, tu vas forcément la rencontrer tellement c'est incontournable en Python.
[...]
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Effectivement, je n'avais pas pensé au '1e2'. J'ai corrigé le cas de la multiple occurrence du '.'
Tu ne couvriras jamais tous les cas, encore un exemple :
float("NaN")
nan -- Benoit Izac
Bonjour,
Le 11/02/2019 à 23:26, Lulu a écrit dans le message
<slrnq63tli.at1.lulu042@Minty.Rock-n-Roll.org> :
def filter_is_number(s):
return ''.join([c for c in s if c in '.0123456789'])
Plus lisible ?
J'ai googlé la méthode 'join', mais ta ligne reste obscure.
Peux-tu expliquer comment ça marche ?
Il faut regarder la fonction join dans la classe str (« '' » est de
type str).
pydoc str.join
Pour la compréhension de liste, continue ton apprentissage, tu vas
forcément la rencontrer tellement c'est incontournable en Python.
[...]
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou
un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche
pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter
derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Effectivement, je n'avais pas pensé au '1e2'.
J'ai corrigé le cas de la multiple occurrence du '.'
Tu ne couvriras jamais tous les cas, encore un exemple :
Bonjour, Le 11/02/2019 à 23:26, Lulu a écrit dans le message :
def filter_is_number(s): return ''.join([c for c in s if c in '.0123456789'])
Plus lisible ? J'ai googlé la méthode 'join', mais ta ligne reste obscure. Peux-tu expliquer comment ça marche ?
Il faut regarder la fonction join dans la classe str (« '' » est de type str). pydoc str.join Pour la compréhension de liste, continue ton apprentissage, tu vas forcément la rencontrer tellement c'est incontournable en Python.
[...]
Le truc c'est que ta fonction retire tout ce qui n'est pas un chiffre ou un ".". Déjà c'est pas terrible car si on rentre "1e2", on ne cherche pas à avoir 12 mais 100. Ensuite, si tu rentres "1..2", ça va planter derrière. Enfin, un float peut être négatif ou commencer par un « + ».
Effectivement, je n'avais pas pensé au '1e2'. J'ai corrigé le cas de la multiple occurrence du '.'
Tu ne couvriras jamais tous les cas, encore un exemple :
float("NaN")
nan -- Benoit Izac
Benoit Izac
Bonjour, Le 11/02/2019 à 23:40, Lulu a écrit dans le message :
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah... Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon script allait revenir de lui-même à la ligne qui demande un nombre... Mais non, j'ai juste le message d'erreur et mon script plante puisque la chaîne saisie contenait un caractère alphabétique ;-( Il faudrait mettre ça dans une boucle, mais je n'en voie pas la structure. Any help ?
n = 'NaN' while True: r = input('Entrez un nombre : ') try: n = float(r) break except ValueError: pass print('La valeur de votre saisi est', n) -- Benoit Izac
Bonjour,
Le 11/02/2019 à 23:40, Lulu a écrit dans le message
<slrnq63ufk.t7i.lulu042@Minty.Rock-n-Roll.org> :
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une
fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except :
rayon = input("Rayon du cercle ? ")
try:
float(rayon)
except ValueError:
print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah...
Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon
script allait revenir de lui-même à la ligne qui demande un nombre...
Mais non, j'ai juste le message d'erreur et mon script plante puisque la
chaîne saisie contenait un caractère alphabétique ;-(
Il faudrait mettre ça dans une boucle, mais je n'en voie pas la
structure.
Any help ?
n = 'NaN'
while True:
r = input('Entrez un nombre : ')
try:
n = float(r)
break
except ValueError:
pass
print('La valeur de votre saisi est', n)
Bonjour, Le 11/02/2019 à 23:40, Lulu a écrit dans le message :
Avant d'écrire cette fonction, j'ai cherché en vain sur le web une fonction qui permette de "nettoyer" la saisie d'un utilisateur.
Une façon de faire, c'est d'utiliser try ... except : rayon = input("Rayon du cercle ? ") try: float(rayon) except ValueError: print("Saisissez un nombre, s'il vous plaît")
je vais tester ça.
Ah... Ouiménon... Dans ma grande naïveté de débutant, je pensais que mon script allait revenir de lui-même à la ligne qui demande un nombre... Mais non, j'ai juste le message d'erreur et mon script plante puisque la chaîne saisie contenait un caractère alphabétique ;-( Il faudrait mettre ça dans une boucle, mais je n'en voie pas la structure. Any help ?
n = 'NaN' while True: r = input('Entrez un nombre : ') try: n = float(r) break except ValueError: pass print('La valeur de votre saisi est', n) -- Benoit Izac
Nicolas
#! /usr/bin/python3 # -*- coding: utf-8 -*-
^^^^^^^^^^^^^^^^^^^^^^^ Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise mais c'est inutile pour python.
C'est aussi utilisé par certains éditeurs pour déterminer l'encodage à utiliser. Ceci dit, la syntaxe suivante est plus simple et fonctionnelle : # coding: utf-8
#! /usr/bin/python3
# -*- coding: utf-8 -*-
^^^^^^^^^^^^^^^^^^^^^^^
Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise
mais c'est inutile pour python.
C'est aussi utilisé par certains éditeurs pour déterminer l'encodage à
utiliser.
Ceci dit, la syntaxe suivante est plus simple et fonctionnelle :
# coding: utf-8
^^^^^^^^^^^^^^^^^^^^^^^ Ceci est par défaut avec Python 3, je ne sais pas si Geany l'utilise mais c'est inutile pour python.
C'est aussi utilisé par certains éditeurs pour déterminer l'encodage à utiliser. Ceci dit, la syntaxe suivante est plus simple et fonctionnelle : # coding: utf-8