2013-06-02 1 views
5

Sto implementando un piccolo strumento da riga di comando in python che deve chiedere all'utente un paio di domande. Io usolibreria python per l'input dell'utente

raw_input('Are you male or female?') 

tutto il tempo. Ora vorrei essere in grado di trattare con gli utenti stupidi (o quelli troppo pigri per leggere/ricordare la documentazione), quindi ho bisogno di verificare se la risposta ha un senso.

gender = '' 
while gender not in ['male', 'female']: 
    gender = raw_input('Are you male or female?') 

Mi chiedo se esiste qualcosa di simile argparse che automatizzare questo problema, qualcosa di simile a

import inputparse 
gender = inputparse.get_input(prompt='Are you male or female?', type=str, possible_input=['male', 'female']) 

e si sarebbe preso cura di controllo automatico, ecc?

+0

Dato ciò che hai mostrato, è abbastanza facile scrivere il tuo. La tua domanda è se c'è una libreria standard o comune per farlo? –

+0

Hai ragione, è semplice da fare, ma proprio come argparse si prende cura di molto di più di quanto non implementerei me stesso (generato automaticamente --help etc), avrei pensato che ci fosse qualcosa di simile per questo problema – Hans

risposta

1

Necromanting di nuovo ...

prega di dare un'occhiata al click se avete bisogno di una libreria di supporto semplice per le domande. Il suo obiettivo principale sono le opzioni a riga di comando, ma credo che siano adatte al tuo caso d'uso.

1

Non so se esiste una biblioteca, ma si potrebbe scrivere una funzione di ordine superiore come questo:

def check_input(predicate, msg, error_string="Illegal Input"): 
    while True: 
     result = input(msg).strip() 
     if predicate(result): 
      return result 
     print(error_string) 

result = check_input(lambda x: x in ['male', 'female'], 
            'Are you male or female? ') 
print(result) 

uscita:

 
Are you male or female? foo 
Illegal Input 
Are you male or female? bar 
Illegal Input 
Are you male or female? Male 
Illegal Input 
Are you male or female? male 
male 
1

ci siamo imbattuti in questa discussione alla ricerca di una biblioteca simile e sono rimasto piuttosto deluso dal fatto che non ce ne sia uno, quindi ne ho scritto uno. Lavorerò molto su questo nei prossimi giorni perché ho bisogno di molte più funzionalità per quello che sto scrivendo.

pickone

2

Dalla risposta accettata a this question: la biblioteca cmd potrebbe essere di vostro interesse.

"La classe Cmd fornisce un semplice framework per la scrittura di interpreti di comandi orientati alla linea."

This Python Module of the Week page dispone di esso, e ha alcuni esempi e spiegazioni.