Contar vocales en string de caracteres mediante python

A veces, me pongo a leer aspectos relacionados con un tema específico, en este caso python, y me encuentro con cosas que me podrían ser útil a futuro. Por ejemplo, alguien en Taringa solicitaba ayuda para resolver unos ejercicios y el primero de ellos estaba relacionado con el de “producir una función que reciba una palabra e imprima la cantidad de vocales que se ingresaron”.

Obviamente, me dediqué a resolverlo por mi cuenta y después lo comparé con varias propuestas en la red. Por ejemplo, el ejercicio 4 de esta referencia:

Ejercicios resueltos en python (Parte 1)

lo resuelve mediante un if…elif…else (aunque le falta recorrer el string) pero yo quería algo más conciso. Pensé en un diccionario pero no recordé lo de los items(), tal como lo implementan aquí, al final:

https://gist.github.com/ricardosiri68/5870062

y lo deseché. No obstante, el código no funciona con vocales acentuadas porque la función miembro lower() es insensible a ellas; tal como puede corroborarse en el siguiente ejemplo:

zeito@debian:~/Desktop/python$ python vocales.py
Ingrese una palabra: MÁSCARA
A -> 2
I -> 0
E -> 0
U -> 0
O -> 0
TOTAL -> 2
mÁscara

Se corrige incrementando las entradas en el diccionario; algo que quien desarrolló el código quería evitar.

No obstante, mi propuesta se basa en un lista para la cual encontré la forma de expresar los caracteres especiales (vocales acentuadas) mediante secuencias de escape. Es el siguiente:

#!/usr/bin/env python
# -*- coding: utf-8

def numVocales(word):
	#Lista con los códigos de las vocales acentuadas: '\xa1' es á aunque en realidad es
	#'\xc3'+'\xa1'; pero '\xc3' es común a todas las acentuadas
	vowels = ['\xa1', '\xa9', '\xad', '\xb3', '\xba', 'a', 'e', 'i', 'o', 'u',
	          '\x81', '\x89', '\x8d', '\x93', '\x9a', 'A', 'E', 'I', 'O', 'U']

	i = 0
	cont = 0

	while i < len(word):

		cont += vowels.count(word[i])

		i += 1 

	return cont

#Comienzo del programa

from os import system 

system('clear')

palabra = 'áéíóúÁÉÍOU'

palabra2 = list(palabra)

#Imprime la lista para obtener los códigos de las vocales acentuadas
print "Códigos para las vocales acentuadas\n", palabra2

#implementa la función
print "El número de vocales en %s es %s" % (palabra, numVocales(palabra))

print "Una manera de verificar los códigos"
for i in range(0, len(palabra), 2):
	print palabra[i]+palabra[i+1],

print "\nOtra manera de verificar los códigos"
print '\xc3'+'\xa1'+'\xc3'+'\xa9'+'\xc3'+'\xad'+'\xc3'+'\xb3'+'\xc3'+'\xba'+'\xc3'+'\x81'+'\xc3'+'\x89'+'\xc3'+'\x8d'

Al ejecutarlo se obtiene lo siguiente:

vocales

Esta entrada fue publicada en Código Python, Software Libre. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s