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: