Bonjour,
j'aimerais savoir comment faire pour demander à l'tilisateur de choisir entre 2 options, du genre ceci:
toto[25> main.py
1.a
2.b
Choisir entre a et b?
Bonjour,
j'aimerais savoir comment faire pour demander à l'tilisateur de choisir entre 2 options, du genre ceci:
toto[25> main.py
1.a
2.b
Choisir entre a et b?
bonjour,
la fonction clé est raw_input qui récupère une entrée clavier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #python 2.x print "1.a" print "2.b" while 1: i = raw_input("Choisissez 1 ou 2: ") if i not in ['1', '2']: print "Choix incorrect !" else: break
Bonjour,
La question est très générique : Vous parlez d'un menu et le code donné est pour la console. Que voulez vous faire exactement ?
Dans l'attente:
Comme indiqué au début (#python 2.x) le code de kango ne fonctionne que sous Python 2.x
Sous Python 3 raw_input est remplacé par input et print est une fonction.
Voici donc quelque chose de plus universel.
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #!/usr/bin/env python #-*- coding: utf-8 -*- # # from sys import version if version[0] == "3": raw_input = input print("1.a") print("2.b") while 1: reponse = raw_input("Choisissez 1 ou 2: ") if reponse in ['1', '2']: break else: print ("Choix incorrect !") print(reponse)
Edit:
Puisque je vous en parle dans un autre sujet kali38 et pour le fun
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 #!/usr/bin/env python #-*- coding: utf-8 -*- # # import sys class Getch: def __init__(self): if sys.platform == 'linux2': self.impl = _GetchUnix() elif sys.platform == 'win32': self.impl = _GetchWindows() elif sys.platform == 'darwin': self.impl = _GetchMac() else: raise EnvironmentError("System not supported") def __call__(self): return self.impl() class _GetchUnix: def __init__(self): import tty def __call__(self): import tty, termios _fd = sys.stdin.fileno() _old_settings = termios.tcgetattr(_fd) try: tty.setraw(sys.stdin.fileno()) ch = sys.stdin.read(1) finally: termios.tcsetattr(_fd, termios.TCSADRAIN, _old_settings) return ch class _GetchWindows: def __init__(self): import msvcrt def __call__(self): import msvcrt import time while not msvcrt.kbhit(): time.sleep(0.1) return msvcrt.getch() class _GetchMac: def __init__(self): import Carbon Carbon.Evt def __call__(self): import Carbon if Carbon.Evt.EventAvail(0x0008)[0] == 0: return '' else: (what, msg, when, where, mod) = Carbon.Evt.GetNextEvent(0x0008)[1] return chr(msg & 0x000000FF) getch = Getch() print("1.a") print("2.b") sys.stdout.write("Choisissez 1 ou 2: ") while 1: reponse = getch() if reponse in ['1', '2']: break print(reponse)
Salut,
je suppose que le getch() doit être bloquant? Dans ce cas, ça ne marche pas sous python 2.7 windows xp. Je peux juste dire que ça prend tout le temps CPU, donc à priori c'est du polling brutal sous cette config.
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 getch = Getch() print("1.a") print("2.b") sys.stdout.write("Choisissez 1 ou 2: ") while 1: reponse = getch() if reponse == '': sys.stdout.write('<>') else: sys.stdout.write("%02x "%ord((reponse[0]))) print(reponse)
Pfeuh
Merci pour l'info pfeuh.
Ceci devrais calmer le jeu (je pense, pas de poste Windows pour tester)
(code modifier dans ce sens)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class _GetchWindows: def __init__(self): import msvcrt def __call__(self): import msvcrt import time while not msvcrt.kbhit(): time.sleep(0.1) return msvcrt.getch()
Effectivement, comme ça, ça marche nickel. Si on lance le script dans une console, c'est parfait. Par contre si on le lance en utilisant la console de Scite, le msvcrt.kbhit() ne détecte absolument rien. On va dire que c'est normal, j'ai déjà constaté des comportements rebelles sur la console de Scite, je ne cherche même plus à comprendre.
A+
Pfeuh
Partager