2015-05-16 16 views
7

Czy istnieje szybki sposób na wyrażenie "jeśli", aby zaakceptować łańcuch, niezależnie od tego, czy jest on pisany małymi literami, dużymi literami, czy w języku Python?jeśli instrukcje/else przyjmują łańcuchy zarówno dużymi, jak i małymi literami w pythonie

Próbuję napisać fragment kodu, w którym można wprowadzić cyfrę "3", a także słowo "trzy" lub "Trzy" lub dowolną inną mieszankę kapitału i małej litery, a nadal będzie akceptowane przez instrukcję "if" w kodzie. Wiem, że mogę użyć "lub", aby zaakceptować "3", jak również każdy inny ciąg znaków, ale nie wiem, jak uzyskać akceptację ciągu w więcej niż jednym przypadku. Do tej pory mam:

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

Użyj '.lower()', aby znormalizować wartość dostarczoną przez użytkownika? –

+0

Jeśli masz dużo tego, to wolę sugerować posiadanie funfu foo, który konwertuje 3 na trzy ... – therealprashant

Odpowiedz

8

Wystarczy przekonwertować Class na małe litery przy użyciu str.lower() i przetestować go.

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

Oczywiście można również użyć str.upper().

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

Ostatnią rzeczą jest to, że można sprawdzić na "3" i "three" jednocześnie stosując in.

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

Podczas korzystania in na rachunku if, masz kilka opcji. Możesz użyć zestawu, {"3", "three"}, którego użyłem, listy, ["3", "three"] lub krotki, ("3", "three").

Ostatnią rzeczą, aby pamiętać, że nazywając str.lower() lub str.upper() na "3" daje "3", ale nazywając ją na całkowitą 3, wygeneruje błąd, więc jeśli 3 nie można używać in jako liczba całkowita jest możliwe wartość dla Class.

+0

Edytowałem twój post, aby mieć lepszy styl kodu. – orlp

+2

W twoim ostatnim przykładzie możesz rozważyć użycie zestawu: '{'3', 'three'}'. Nie tylko zapewnia szybsze wyszukiwanie, jest właściwym typem danych dla zadania. –

+0

@HaiVu Dzięki, zredagowałem to w. – michaelpri

2

Jeśli używasz string.lower() możesz zmienić cały ciąg na małe litery, aby można było sprawdzić to w instrukcji if. Po prostu zamień łańcuch na rzeczywisty ciąg znaków. Więc Class.lower()

1

Bądź ciąg małych liter .:

Class.lower() == "three" 
4

Można po prostu zmusić wszystkie sznurki na małe i tylko sprawdzić dolną sprawę tak:

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

Zazwyczaj zrobić nieczułym porównaj zrobię moją małą literę. Choć Class jest ryzykowne nazwę w użyciu, ponieważ class jest s Hasło można wykonać następujące czynności

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

itd

bym go zapisać jako niższy tylko wtedy, gdy nie trzeba zachować sprawę na cokolwiek później, a zwłaszcza jeśli masz inne porównania, takie jak przeciwko "czwórce" i

+1

używając niższego przed, jeśli jest w porządku, ale twoje 'Class == 3' nigdy nie będzie pasowało, ponieważ próbuje dopasować int 3 do napisu 3. Powinno mieć' Class == "3" ' – JGreenwell

+0

@jgreenwell dobry połów, dzięki –

11

Możesz użyć operatora in z list.

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

Tylko dla odniesienia '3'.lower() powrotów ciąg 3.

>>> '3'.lower() 
'3' 
Powiązane problemy