Accettare la lettera minuscola o maiuscola in Python

Lavorando su un display del menu, dove la lettera “m” porta l’utente torna al menu principale. Come posso farlo in modo che funziona a prescindere se la lettera “m” è maiuscolo o minuscolo?

elif choice == "m":
InformationsquelleAutor luckytaxi | 2010-10-18



3 Replies
  1. 12

    Uno dei

    elif choice in ("m", "M"):
    elif choice in "mM":                       # false positive if choice == ''
    elif choice == 'm' or choice == 'M':
    elif choice.lower() == 'm':

    In termini di manutenibilità, 4 ° alternativa è migliore quando si desidera estendere a case-insensitive confronto di più-lettera di stringhe, in quanto è necessario fornire tutti 2N possibilità nel 1 ° e 3 ° alternative. 2 ° alternativa funziona correttamente solo per il singolo stringhe di caratteri.

    Con il 4 ° alternativa è anche impossibile perdere un caso in cui si desidera modificare il 'm' per le altre lettere.

    In termini di efficienza, il 2 ° alternativa è più efficiente, e quindi il 1 ° e poi il 3 ° e infine il 4 ° posto. Questo è perché il 3 ° alternativa coinvolge più operazioni; e mentre la funzione di chiamata e di ottenere l’attribuzione è lento, in Pitone, in modo che entrambi fa il 4 ° alternativa relativamente lento.

    Vedere http://pastie.org/1230957 per lo smontaggio e timeit risultato.

    Naturalmente, a meno che si sta facendo questo confronto di 10 milioni di volte non c’è percepibile la differenza tra ciascuno di essi.

    • L’OP già detto che questo era per un menu di visualizzazione, che è, l’input dell’utente. Perché l’ossessione timeit?
    • Io non sono d’accordo con la 3 ° opzione 3 ° in termini di efficienza. Grazie per i più pigri, la valutazione e il fatto che le altre operazioni intrinsecamente coinvolgere confronti di uguaglianza, comunque, è più veloce o più veloce rispetto a quelli di altri. Ma è anche il meno divinatori uno.
    • Si dovrebbe davvero imparare a leggere timeit risultati. Sono incredibilmente utili per dirimere la confusione in tema di efficienza. Hanno corretto gli errori nella mia intuizione in più di un’occasione.
    • Grazie per l’indispensabile parole di indescrivibile saggezza. Adesso vado davvero imparare a leggere timeit risultati 😐
    • indescrivibile la saggezza non è nelle mie parole, ma in timeit risultati che si sono casualmente affermando che la vostra intuizione trionfi di dati concreti che rende perfetto senso, una volta letto il bytecode elenchi, direi che è necessario eliminare l’atteggiamento e imparare a leggere un timeit risultato e bytecode seguente criterio. 🙂 HTH!
    • Hai ragione. Il mio male.
    • La seconda scelta non riesce se l’utente colpisce solo <invio> perché le stringhe vuote sono sempre presenti in una stringa.

  2. 1

    Questo modo sia molto chiaro e succinto:

        elif choice in {'m', 'M'}:

    Naturalmente, esprimere in questo modo richiede Python 2.7 o 3.x che supportano impostare i valori letterali. Non so come si confronta efficacia per le altre risposte, ma il dubbio che conta molto per un caso come questo.

    • Dalla memoria prospettiva questo è il peggiore di tutti. ‘mM’ -> 27 byte (‘m’, ‘M’) -> 36 byte {‘m’, ‘M’} -> 116 byte, naturalmente, per una volta che la verifica è ok, ma se si dispone di molti elementi o sono in esecuzione in un ciclo, che potrebbe essere il problema.
    • Non capisco la tua affermazione come molti elementi sono coinvolti o se è utilizzato in un ciclo importante con il rispetto per la dimensione della temporanea set letterale coinvolti.
    • Mi dispiace. Quello che voglio dire è impostato ha più memoria di quella stringa ‘mM’. Abbiamo quindi da usare con parsimonia, se non utilizzate, per esempio, in un ciclo di centinaia o migliaia di iterazioni.

Lascia un commento