Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python] Vérifier que la variable est un entier

Sujet résolu
26 août 2008 à 18:23:25

Bonjour tout le monde
Je suis en train de tourner en rond... je cherche à vérifier que l'utilisateur entre bien un nombre dans une variable, et je veux qu'il n'entre qu'un nombre, pas autre chose, alors j'ai fais ça:
choix=0

while choix==0:
    nb_car = int(raw_input("Entrez le nombre de caracteres du mdp a generer : "))
    if type(nb_car) != int:
        print("Entrez un nombre.")
    else:
        choix=1

Le problème, c'est que si j'entre des lettres, ça plante, tout simplement. C'est ennuyeux :- )

Si quelqu'un a une astuce à me passer... ça serait sympa :D
  • Partager sur Facebook
  • Partager sur Twitter
26 août 2008 à 18:28:36

regardes du côté de "try" et "except"
nb_car = int(raw_input("Entrez le nombre de caracteres du mdp a generer : "))


si tu entres un caractere alphabetique, int() plante evidement.
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

26 août 2008 à 18:46:07

Hum...
je suis allé voir sur google, et après ça j'essaye ça:
while choix==0:
    raw_input("Entrez le nombre de caracteres du mdp a generer : ")
    try:
        int(nb_car)
        choix=1
        break
    except ValueError:
        print("Entrez un nombre.")

Donc je teste si je peux transformer ma variable nb_car en entier, et si c'est possible, la variable choix vaut 1.
Le truc, c'est que si j'entre un nombre, j'ai le droit à "Entrez un nombre". Donc j'ai une boucle infinie...
Je suis un peu perdu là...

Edit: ooooh je viens de voir que j'ai fais une grosse boulette, 2sc je corrige ça
  • Partager sur Facebook
  • Partager sur Twitter
26 août 2008 à 18:50:10

raw_input("Entrez le nombre de caracteres du mdp a generer : ")

l'erreur est là
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

26 août 2008 à 18:51:04

oui je viens de voir, merci quand même :-)
Edit: Et voici tout le programme qui fonctionne correctement :- )
from random import randrange

choix=0

while choix==0:
    nb_car=raw_input("Entrez le nombre de caracteres du mdp a generer : ")
    try:
        int(nb_car)
        choix=1
        break
    except ValueError:
        print("Entrez un nombre.")

choix=0

while choix==0:
    MAJ = raw_input("Autoriser les majuscules? oui/non : ")
    if MAJ == "oui":
        choix=1
    elif MAJ == "non":
        choix=1
    else:
        print("Ecrivez \"oui\" ou \"non\" s'il vous plait")
    
nb_car=int(nb_car)
l_mdp=0
mdp=""
alphabet=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']

while l_mdp < nb_car:
    if randrange(0,2)== 0:
        if MAJ=="oui":
            mdp+=alphabet[randrange(0,51)]
        else:
            mdp+=alphabet[randrange(0,25)]
    else:
        mdp+=str(randrange(0,10))
    l_mdp+=1
print(mdp)

raw_input("Appuyez sur entree pour terminer le programme.")

Un grand merci à toi josmiley!
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 août 2008 à 18:57:06

en effet... y'a erreur:

try et except servent à donner à la machine des instructions à exécuter en cas d'erreur dans le bloc "try" (si qqn a une explication plus claire, je prends.)

while True: # ne te prends pas la tête avec ce genre de variable
    try:
        nb_car = int(raw_input("Entrez le nombre de caracteres du mdp a generer : ") # il faut quand même assigner le résultat du raw_input à une variable
        break
    except:
        print "veuillez entrer un nombre"
        pass


explication :
soit l'utilisateur rentre une variable de type int, auquel cas, break permet de sortir de la boucle.
sinon, un dit à python d'ignorer l'erreur, retour au début.

edit: grilled :p
  • Partager sur Facebook
  • Partager sur Twitter
26 août 2008 à 18:59:48

Hehe merci quand même, en plus tu m'a permit de mieux comprendre comment fonctionne le couple try/except
  • Partager sur Facebook
  • Partager sur Twitter
26 août 2008 à 19:03:49

y a plus qu'à optimiser; genre
choix=0
while choix==0:
    nb_car=raw_input("Entrez le nombre de caracteres du mdp a generer : ")
    try:
        int(nb_car)
        choix=1
        break
    except ValueError:
        print("Entrez un nombre.")


devient
while True:
    try:
        nb_car=int(raw_input("Entrez le nombre de caracteres du mdp a generer : "))
        break
    except ValueError:
        print("Entrez un nombre.")

--------edit----------
arf, bien joué Stakhanov
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

Anonyme
26 août 2008 à 19:05:22

l'intérêt est surtout dans l'utilisation de True au lieu de <choix>.
ça économise une variable globale, et t'évite de devoir la remettre à 0 à chaque fois ;)

note :
uiliser while 1: est valable aussi
si tu as vraiment besoin de la variable choix, tu peux aussi écrire:
while not choix: #(tant que choix est faux --> qu'il vaut 0)


edit 2: chacun son tour ^^
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 août 2008 à 21:37:10

Le try except est bon, mais il y a mieux

isinstance est fait pour ca.

>>> isinstance(4, int)
True
>>> isinstance("coucou", int)
False


un simple if ... else

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 août 2008 à 22:04:16

pas mal o_O
elle sort de la lib standard cette fonction ?
(ça peut servir, j'ai hésité à proposer un truc de ce genre, mais sans cette fonction, ça aurait probablement faux)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 août 2008 à 22:07:44

Citation

elle sort de la lib standard cette fonction ?



Non!

Citation

(ça peut servir, j'ai hésité à proposer un truc de ce genre, mais sans cette fonction, ça aurait probablement faux)



what?

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 août 2008 à 22:21:16

une horreur du genre
if type(nb_car) == 'int':

(j'ai jamais testé, donc j'ai opté pour le try ... except, qui permet d'éviter les ennuis si l'utilisateur ne rentre rien.
  • Partager sur Facebook
  • Partager sur Twitter
26 août 2008 à 22:25:08

Citation : fred1599

Le try except est bon, mais il y a mieux

isinstance est fait pour ca.

>>> isinstance(4, int)
True
>>> isinstance("coucou", int)
False



un simple if ... else



Pas du tout.
>>> isinstance("4", int)
False
>>> "4".isdigit()
True
>>> "a".isdigit()
False


Un try: except: est plus adapté quand on veut récupérer la valeur de la conversion. Si on ne la veut pas, isdigit fait très bien son boulot.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 août 2008 à 22:27:41

wgmpgp:
mais est-ce que isdigit() retourne True avec des float ? son programme demande uniquement des entiers.

edit: s'il y a des "import" a faire, quels sont-ils ?
  • Partager sur Facebook
  • Partager sur Twitter
26 août 2008 à 23:51:50

Citation : Stakhanov

mais est-ce que isdigit() retourne True avec des float ? son programme demande uniquement des entiers.


Et si t'essayais ?

Citation : Stakhanov

edit: s'il y a des "import" a faire, quels sont-ils ?


Pourquoi ne pas lire la doc ? Pourquoi pas apprendre le Python, d'ailleurs ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 août 2008 à 10:03:46

>>> '4.'.isdigit()
False
>>> '4'.isdigit()
True
>>> 'coucou'.isdigit()
False


Réponse?

Citation

s'il y a des "import" a faire, quels sont-ils ?



o_O

  • Partager sur Facebook
  • Partager sur Twitter
18 mars 2018 à 11:36:55

bonjour 

j'ai un exercice en python sous la version 3 qui me demande de limiter les chiffres d'un nombre avec la fonction input().

Pour être plus clair, un utilisateurs choisis combien de chiffre comportera le nombre , exemple 3 chiffre, c'est a dire que le nombre sera compris entre 100 et 999. Ensuite je dois proposer a l'utilisateurs de choisir chaque chiffre (exemple:7,8,9 pour que s'affiche le nombre 789).

Et ensuite faire une condition pour vérifier si c'est un nombre pair ou impair, cela n'est pas compliquer.

pouvez vous m'aider a trouver comment faire svp.

merci d'avance.

cordialement

  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2019 à 14:29:04

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)