2015-05-16 7 views
7

Gibt es eine schnelle Möglichkeit für eine "if" -Anweisung, eine Zeichenfolge zu akzeptieren, unabhängig davon, ob sie in Python in Kleinbuchstaben, Großbuchstaben oder beides ist?if/else-Anweisungen, die Zeichenfolgen in Groß- und Kleinbuchstaben in Python akzeptieren

Ich versuche, ein Stück Code zu schreiben, wo die Zahl "3" sowie das Wort "drei" oder "Drei" oder eine andere Mischung aus Groß- und Kleinbuchstaben eingegeben werden kann und es wird immer noch sein akzeptiert von der "if" -Anweisung im Code. Ich weiß, dass ich "oder" verwenden kann, um "3" sowie jede andere Zeichenkette zu akzeptieren, aber ich weiß nicht, wie ich die Zeichenkette in mehr als einem Fall akzeptieren kann. Bisher habe ich:

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

Verwenden Sie '.lower()', um den vom Benutzer bereitgestellten Wert zu normalisieren? –

+0

Oder wenn du viel if/else hast, dann würde ich eher vorschlagen, ein func foo zu haben, das 3 zu 3 konvertiert ... – therealprashant

Antwort

8

Gerade Class konvertieren in Klein str.lower() mit und testen.

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

Natürlich können Sie auch str.upper() verwenden.

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

Eine letzte Sache ist, dass man für "3" und "three" zugleich in mit überprüfen können.

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

Bei der Verwendung von in für eine if Anweisung, haben Sie mehrere Möglichkeiten. Sie können einen Satz verwenden, {"3", "three"}, den ich verwendet habe, eine Liste, ["3", "three"], oder ein Tupel, ("3", "three").

Eine letzte Sache ist zu beachten, dass str.lower() oder str.upper() auf "3" Aufruf geben Ihnen "3", aber es auf der ganzen Zahl 3, ruft einen Fehler werfen, so können Sie in nicht, wenn 3 verwenden als eine ganze Zahl ein möglicherweise ist Wert für Class.

+0

Ich habe deinen Beitrag bearbeitet, um besseren Code-Stil zu haben. – orlp

+2

In Ihrem letzten Beispiel sollten Sie stattdessen die Verwendung von set in Erwägung ziehen: '{'3', 'three'}'. Nicht nur bietet es schnellere Suche, es ist der richtige Datentyp für den Job. –

+0

@HaiVu Danke, editiert das in. – michaelpri

2

Wenn Sie string.lower() verwenden, können Sie die gesamte Zeichenfolge in Kleinbuchstaben umwandeln, so dass Sie es in einer if-Anweisung überprüfen können. Ersetzen Sie einfach die Zeichenfolge durch Ihre tatsächliche Zeichenfolge. So Class.lower()

1

Machen Sie die Zeichenfolge kleingeschrieben .:

Class.lower() == "three" 
4

Sie können nur alle Strings zwingen Fall zu senken und nur überprüfen Sie die untere Fall wie folgt aus:

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

Regel eine unempfindliche zu tun vergleichen Ich mache meine Variable Kleinbuchstaben. Obwohl Class ein riskanter Name, weil class zu verwenden ist, Sie s Schlüsselwort könnten die

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

folgenden tun und so weiter

würde ich es als niedriger spare nur, wenn Sie den Fall nicht erhalten müssen für etwas später, und vor allem, wenn Sie andere Vergleiche wie gegen "vier" sowie

haben
+1

mit niedriger, bevor das if ist in Ordnung, aber Ihre 'Class == 3' wird nie übereinstimmen, wie es versucht, Int 3 zu String 3 zu passen. Sollte 'Class ==" 3 "' – JGreenwell

+0

@jgreenwell guten Fang, danke –

11

Sie können in Operator mit list verwenden.

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

Gerade als Referenz '3'.lower() kehrt Zeichenfolge 3.

>>> '3'.lower() 
'3' 
Verwandte Themen