2015-06-04 18 views
7

Sto provando a cercare una vocale come primo carattere di una parola. Per il mio codice Al momento ho questo:Esiste un modo migliore per verificare le vocali nella prima posizione di una parola?

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

Mi chiedevo c'è un modo molto migliore per fare questo assegno o è questo il modo migliore e più efficiente?

+8

'se la prima volta nel 'aeiou':' – Sehnsucht

+0

quando si dice "prima parte di un parola ", intendi il primo personaggio o una parte arbitrariamente lunga della parola? – PTBNL

+0

@PTBNL Intendevo il primo carattere – kuthedk

risposta

15

Si può provare in questo modo utilizzare il in:

if first.lower() in 'aeiou': 

o meglio come

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

Meglio creare una serie di vocali, come questo

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

e poi verificare se first è uno di questi

>>> if first in vowels: 
... 

Nota: Il problema con

if first in 'aeiouAEIOU': 

approccio è, se l'input è sbagliato, per esempio, se è first'ae', allora il test avrà esito negativo.

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

Ma il numero ae non è chiaramente una vocale.


Improvement:

Se è solo un lavoro di una volta, dove non si cura di creare un set di anticipo, quindi è possibile utilizzare if first in 'aeiouAEIOU': in sé, ma controllare la lunghezza del first In primo luogo, come questo

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

Penso che questo sia un non-problema, assumendo che l'OP abbia definito 'prima' come una stringa di un singolo carattere (presumibilmente come' first = my_str [0] '). – Nitzle

1

Ecco l'approccio regex:

from re import match 

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

Questa espressione regolare corrisponderà se il primo carattere di "primo" è una vocale.

1

Se la funzione restituisce valore booleano quindi più facile e più semplice sarà

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

O

return first.lower() in 'aeiou' 
Problemi correlati