2015-06-04 13 views
7

Ich versuche nach einem Vokal als erstes Zeichen eines Wortes zu suchen. Für meinen Code habe ich zur Zeit so:Gibt es eine bessere Möglichkeit, nach Vokalen in der ersten Position eines Wortes zu suchen?

if first == 'a' or first == 'e' or first == 'i' or first == 'o' or first == 'u': 

Ich frage mich, ist es eine viel bessere Möglichkeit, diese Prüfung zu tun, oder ist dies der beste und effizienteste Weg?

+8

'wenn zuerst in‚aeiou‘:' – Sehnsucht

+0

Wenn Sie sagen, „erster Teil eines Wort ", meinst du das erste Zeichen oder einen beliebig langen Abschnitt des Wortes? – PTBNL

+0

@PTBNL Ich meinte das erste Zeichen – kuthedk

Antwort

15

Sie können wie diese versuchen, mit dem in:

if first.lower() in 'aeiou': 

oder besser wie

if first.lower() in ('a', 'e', 'i', 'o', 'u'): 
7

besser einen Satz von Vokalen schaffen, wie diese

>>> vowels = set('aeiouAEIOU') 
>>> vowels 
set(['a', 'A', 'e', 'i', 'o', 'I', 'u', 'O', 'E', 'U']) 

und dann zu prüfen, ob first ist eine von ihnen wie diese

>>> if first in vowels: 
... 

Hinweis: Das Problem mit

if first in 'aeiouAEIOU': 

Ansatz ist, wenn Sie Ihre Eingabe falsch ist, zum Beispiel, wenn first'ae' ist, dann wird der Test nicht bestehen.

>>> first = 'ae' 
>>> first in 'aeiouAEIOU' 
True 

Aber ae ist eindeutig kein Vokal.


Verbesserung:

Wenn es nur eine einmalige Aufgabe ist es, wo Sie kümmern sich nicht einen Satz vorher zu erstellen, dann können Sie if first in 'aeiouAEIOU': selbst, sondern prüfen die Länge first zuerst, wie dies

>>> first = 'ae' 
>>> len(first) == 1 and first in 'aeiouAEIOU' 
False 
+3

Ich würde denken, dass dies kein Problem ist, vorausgesetzt, das OP hat 'first' als eine einzelne Zeichenfolge definiert (vermutlich wie' first = my_str [0] '). – Nitzle

1

Hier ist der regex Ansatz:

from re import match 

if match(r'^[aieou]', first): 
    ... 

Dieser reguläre Ausdruck wird übereinstimmen, wenn das erste Zeichen von "first" ein Vokal ist.

1

Wenn Ihre Funktion Booleschen Wert zurückgibt, dann wird am einfachsten und einfachste Weg seines

`bool(first.lower() in 'aeiou')` 

Oder

return first.lower() in 'aeiou' 
Verwandte Themen