#1 Le 27/01/2008, à 18:13
- thibaultg
Python utilisation raw_input et input[resolu]
Bonjour,
option=input("entrer un chiffre")
Je voudrait que l'utilisateur ne puisse entrer que des chiffres, et si il rentre autre chose que des chiffres alors qu'on lui redemande de saisir un chiffre. Mais j'y arrive pas et je trouve pas d'exemple sur les forum.
Vous pouvez m'aider?
J'ia bien penser faire des truc comme
drapo=0
while(drapo=!1):
option=raw_input("entrez un chiffre")
if(int(option)):
drapo=1
else:
print "ce n'est pas un chiffre"
Mais cela ne marche pas en python
Dernière modification par thibaultg (Le 27/01/2008, à 19:38)
Hors ligne
#2 Le 27/01/2008, à 19:16
- reeth
Re : Python utilisation raw_input et input[resolu]
Attention à ne pas inverser les caractère : c'est != pou différent et non =!
Et fais aussi attention à l'indentation qui doit être homogène et bien présente en python
Hors ligne
#3 Le 27/01/2008, à 19:29
- thibaultg
Re : Python utilisation raw_input et input[resolu]
Oui merci, mais cette faute frappe et d'indentation ne sont pas presente dans mon programme.
J'ai cependant toujours la même question comment connaà®tre le type d'une variable, c'est a dire si c'est un string ou un integer
J'ai résolu mon problème de programmation( mais je me pose toujours la question de dessus), en faisant comme ceux_ci:
def verifie_coef_chiffre(texte):
option=-1
drapo=0
while(drapo!=1):
try:
#print text
option=input(texte)
drapo=1
except:
print "vous ne pouvez taper que des chiffres et rien d'autre"
return option
Dernière modification par thibaultg (Le 27/01/2008, à 19:31)
Hors ligne
#4 Le 27/01/2008, à 19:37
- thibaultg
Re : Python utilisation raw_input et input[resolu]
Bon avec mon google, et surtout que ma question n'été pas tres compliqué, j'ai trouvait:
http://www.developpez.net/forums/showth … p?t=423157
http://fr.wikibooks.org/wiki/Programmation_Python/Type
Hors ligne
#5 Le 29/01/2008, à 01:31
- reeth
Re : Python utilisation raw_input et input[resolu]
Pour connaître le type c'est type(). Si tu veux savoir si c'est bien un int :
if (type(a)==int):
print 'int'
else:
print 'autre'
par exemple.
Hors ligne
#6 Le 29/01/2008, à 14:37
- thibaultg
Re : Python utilisation raw_input et input[resolu]
Lol merci c'est justement ce qui est marqué dans les lien que j'ai mis juste au-dessus mais merci beaucoup, le forum de ubuntu est toujours aussi sympa.
Merci a toi
Hors ligne
#7 Le 29/01/2008, à 17:30
- aleph
Re : Python utilisation raw_input et input[resolu]
Autant prendre de bonnes habitudes; tester ce qui peut l'être *avant* de laisser une application se débrouiller.
>>> def isi(s):
"""isi(string) - > Boolean\n\nTeste si l'argument peut représenter un entier."""
if not s or (s.startswith('0') and len(s) > 1):
return False
for c in s:
if c not in '0123456789':
return False
return True
>>> while True:
r = raw_input('nombre entier :')
if isi(r):
val = int(r)
break
nombre entier :00
nombre entier :04
nombre entier :z
nombre entier :/
nombre entier :234
>>> isi.__doc__
isi(string) - > Boolean
Teste si l'argument peut représenter un entier.
>>> #pour info
>>> isinstance(val, int)
True
>>>
#8 Le 30/01/2008, à 22:14
- reeth
Re : Python utilisation raw_input et input[resolu]
@aleph : il est plus conseillé de parcourir les éléments '0123456789' que d'utiliser une fonction comme type()? Et 0 n'est-il pas un int (comme d'ailleurs 001, 0289)?
Sinon merci de donner ces codes toujours clairs et précis
Hors ligne
#9 Le 31/01/2008, à 00:07
- kaer
Re : Python utilisation raw_input et input[resolu]
Python 2.5.1 (r251:54863, Oct 5 2007, 13:36:32)
Type "copyright", "credits" or "license" for more information.
IPython 0.8.1 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]: def is_integer(s):
try: int(str(s))
except: return False
else: return True
....:
....:
In [2]: is_integer(55)
Out[2]: True
In [3]: is_integer('55')
Out[3]: True
In [4]: is_integer(55.5)
Out[4]: False
In [5]: is_integer('55.5')
Out[5]: False
In [6]: is_integer('5f5.5')
Out[6]: False
Hors ligne
#10 Le 31/01/2008, à 10:28
- aleph
Re : Python utilisation raw_input et input[resolu]
> il est plus conseillé de parcourir les éléments '0123456789' que d'utiliser une fonction comme type()?
1) Il est *toujours* préférable d'essayer de prévenir une erreur plutôt que corriger celle-ci après coup.
Cas classique: division de a par b.
2) La fonction type devrait être utilisée à bon escient. L'utiliser pour *déterminer* un type de variable, oui. L'utiliser pour *tester* la validité d'une variable est plus délicat. (subtile nuance). Retour à la case 1)
3) La mise en place d'un *bon* gestionnaire d'erreur est toujours une tâche très délicate. Autant l'éviter. Retour à la case 1)
4) type() à la vie dure. isinstance() est conseillé (plus moderne, cela à voir avec l'unification "type - new style class")
> Et 0 n'est-il pas un int (comme d'ailleurs 001, 0289)?
Dans ma petite fonction sans prétention, je teste le zéro pour la beauté. Attention toutefois à la pervesité d'un zéro avant un nombre. Selon le contexte, cela peut signifier un nombre octal.
>>> chr(043)
#
>>> chr(43)
+
>>> #et logiquement
>>> chr(048)
File "<psi last command>", line 1
chr(048)
^
SyntaxError: invalid token
#11 Le 31/01/2008, à 11:02
- kaer
Re : Python utilisation raw_input et input[resolu]
1) Il est *toujours* préférable d'essayer de prévenir une erreur plutà´t que corriger celle-ci après coup.
Cas classique: division de a par b.
Ca c'est une grosse boulette ! En tous cas en Python, il vaut trés souvent mieux risquer l'erreur et catcher l'exception: c'est souvent plus propre, plus concis, plus lisible. Il y a des exceptions quand récupérer une erreur est trop "couteux" par rapport à l'anticiper. J'ai un souvenir vague que Martelli a écrit une ou deux pages là -dessus dans un de ses bouquins (je me souviens de "better fogive than ask permission" ou quelque chose comme ça).
Le point 3 est aussi plus que discutable ... le script aussi et si on veut absolument faire ça, il y a string.digits !
Au lieu d'inventer des régles, je suggére de s'en tenir au "Zen of Python":
In [9]: import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
In [10]: import string
In [11]: string.digits
Out[11]: '0123456789'
Il y a même une traduction française qui vaut ce qu'elle vaut mais a au moins le grand mérite d'exister: http://laurent.pointal.org/python/docs/zen
Hors ligne
#12 Le 31/01/2008, à 15:16
- aleph
Re : Python utilisation raw_input et input[resolu]
Tant qu'à faire autant le faire proprement, cad déjà renvoyer une valeur si celle-ci est correcte. Cela évite une deuxième future conversion. (Pas très différent de "is_integer").
def is_integer2(s):
try:
return int(s)
except ValueError:
return None
else:
return None
A noter qu'une telle construction sur ce modèle échouera pour tester un "float".
> il y a string.digits !
Ce fut une omission volontaire pour la clarté de l'explication. Ma préférence irait plutà´t à un
>>> '123'.isdigit()
True
> Zen of Python, Explicit is better than implicit.
C'est exactement mon intention. Explicitement tester l'entrée et agir en conséquence plutà´t que de laisser implicitement l'application se débrouiller, surtout quand ce genre de test est très simple à réaliser.
> ...discutable...
Effectivement tout l'est. Ma petite fonction sans prétention - mais malgré tout assez solide - avait uniquement pour but de démontrer les propos cités dans le paragraphe précédent.
Il existe de nombreux modules pour tester la validité d'une entrée, les GUI possèdent généralement une/des fonction/s de validation. Tous ces outils ont un but commun, tester avant d'entreprendre.
#13 Le 01/02/2008, à 21:44
- reeth
Re : Python utilisation raw_input et input[resolu]
Ok merci pour toutes ces précisions.
Hors ligne