2015-05-16 33 views
7

Esiste un modo rapido per un'istruzione "if" di accettare una stringa indipendentemente dal fatto che sia in minuscolo, maiuscolo o entrambi in python?if/else istruzioni che accettano stringhe in lettere maiuscole e minuscole in python

Sto tentando di scrivere un pezzo di codice in cui è possibile immettere il numero "3" e la parola "tre" o "Tre" o qualsiasi altra combinazione di maiuscole e minuscole e sarà comunque accettato dalla dichiarazione "se" nel codice. So che posso usare "o" per far sì che accetti "3" come qualsiasi altra stringa, ma non so come farlo accettare in più di un caso. Finora ho:

if (Class == "3" or Class=="three"): 
    f=open("class3.txt", "a+") 
+1

Utilizzare '.lower()' per normalizzare il valore fornito dall'utente? –

+0

Oppure se hai un sacco di if/else allora preferirei suggerire una funzione foo che converta da 3 a tre ... – therealprashant

risposta

8

solo convertire in minuscolo Class utilizzando str.lower() e testarlo.

if Class == "3" or Class.lower() == "three": 
    f=open("class3.txt", "a+") 

Naturalmente, è anche possibile utilizzare str.upper() troppo.

if Class == "3" or Class.upper() == "THREE": 
    f=open("class3.txt", "a+") 

Un'ultima cosa è che si può verificare la presenza di "3" e "three" allo stesso tempo utilizzando in.

if Class.lower() in {"3", "three"}: 
    f=open("class3.txt", "a+") 

Quando si utilizza in per if dichiarazione, sono disponibili diverse opzioni. È possibile utilizzare un set, {"3", "three"}, che ho utilizzato, un elenco, ["3", "three"] o una tupla, ("3", "three").

Un'ultima cosa da notare è che chiamando str.lower() o str.upper() su "3" vi darà "3", ma chiamandolo sul intero 3, genera un errore, quindi non è possibile utilizzare in se 3 come un intero è un forse valore per Class.

+0

Ho modificato il tuo post per avere uno stile di codice migliore. – orlp

+2

Nel tuo ultimo esempio, potresti prendere in considerazione l'utilizzo di set: '{'3', 'three'}'. Non solo fornisce una ricerca più rapida, è il giusto tipo di dati per il lavoro. –

+0

@HaiVu Grazie, modificato quello in. – michaelpri

2

Se si utilizza string.lower() è possibile trasformare l'intera stringa in lettere minuscole in modo da poterla controllare in una dichiarazione if. Sostituisci semplicemente la stringa con la tua stringa vera e propria. Così Class.lower()

1

Fai caso la stringa inferiore .:

Class.lower() == "three" 
4

Si può solo costringere tutte le stringhe in lettere minuscole e selezionare solo la minuscola in questo modo:

if (Class == "3" or Class.lower() == "three"): 
    f=open("class3.txt", "a+") 
2

genere per fare un insensibile confronta Farò la mia variabile in minuscolo. Anche se è un nome Class rischioso da usare, perché è class s parola chiave è possibile effettuare le seguenti operazioni

Class = Class.lower() 
if(Class =="3" or Class=="three"): 

E così via

mi piacerebbe risparmiare come inferiore solo se non è necessario per preservare il caso per qualsiasi cosa più avanti, e specialmente se avete altri confronti come contro "quattro" pure

+1

usando inferiore prima che il se sia corretto ma il tuo 'Class == 3' non potrà mai corrispondere dato che sta cercando di far corrispondere int 3 a stringa 3. Dovrebbe avere' Class == "3" ' – JGreenwell

+0

@jgreenwell buona cattura, grazie –

11

È possibile utilizzare l'operatore in con list.

if Class.lower() in ['3', 'three']: 

Solo per riferimento '3'.lower() rendimenti stringa 3.

>>> '3'.lower() 
'3'