In [19]:
"""
IPython Notebook v4.0 para python 2.7
Librerías adicionales: Ninguna.
Contenido bajo licencia CC-BY 4.0. Código bajo licencia MIT. (c) Sebastian Flores.
"""
# Configuracion para recargar módulos y librerías
%reload_ext autoreload
%autoreload 2
from IPython.core.display import HTML
HTML(open("style/iwi131.css", "r").read())
Out[19]:
Queremos conocer cuales son las palabras más comunes en un idioma. Para eso, necesitamos saber cuantas veces aparece cada palabra en una frase. Desarrolle una función contar_palabras que al ser aplicada sobre un string, entregue un diccionario con las palabras y la cantidad de veces que aparece en la frase. Omita espacios y signos de puntuación y exclamación.
t = 'El sobre, en el aula, esta sobre el pupitre.'
contar_palabras(t)
{'el': 3, 'en': 1, 'esta': 1, 'aula': 1,
'sobre': 2, 'pupitre': 1}
¿Cómo realizaría usted esta difícil tarea?
El procesamiento de texto utiliza:
string
posee una rica colección de métodos que debe manejar para simplificar la tarea de procesamiento de texto.
In [23]:
print len("\n")
a1 = 'casa\narbol\npatio'
print a1
print len(a1)
a2 = '''casa
arbol
patio'''
print a2
print len(a2)
print a1==a2
b = 'a\nb\nc'
print b
print len(b)
In [25]:
print len("\t")
a = 'casa\n\tarbol\n\tpatio'
print a
b = 'a\tb\tc'
print b
print len(b)
In [29]:
palabra = 'cara'
palabra2 = palabra.replace('r', 's')
print palabra
print palabra2
print palabra2.replace('ca', 'pa')
print palabra2.replace('a', 'e', 1)
print palabra2.replace('c', '').replace('a', 'o') # Encadenamiento de metodos
print palabra
Para separar un string tenemos 2 opciones:
list(mi_string)
, que genera una lista con los carácteres de mi_string
en orden.mi_string.split(s)
, que generar una lista de "palabras" que han sido separadas por el string s
. El string s
no estará en ninguno de los substrings de la lista. Por defecto, s
es el caracter espacio " ".
In [30]:
oracion = 'taca taca'
print list(oracion)
print set(oracion)
print oracion.split()
print oracion.split("a")
print oracion.split("t")
print oracion.split("ac")
In [33]:
mi_lista = ['Ex', 'umbra', 'in', 'solem']
print ' '.join(mi_lista)
print ''.join(mi_lista)
print ' -> '.join(mi_lista)
In [34]:
mi_conjunto = {'Ex', 'umbra', 'in', 'solem'}
print mi_conjunto
print ' '.join(mi_conjunto)
print ''.join(mi_conjunto)
print ' -> '.join(mi_conjunto)
In [35]:
lista_de_strings = ["1", "2", "3"]
print ", ".join(lista_de_strings)
In [36]:
lista_de_ints = [1, 2, 3]
print ", ".join(lista_de_ints)
In [37]:
lista_de_ints = range(10)
lista_de_strings = []
for x in lista_de_ints:
lista_de_strings.append(str(x))
print ", ".join(lista_de_strings)
In [44]:
numeros = range(10)
print numeros
def f(x):
return 2.*x + 1./(x+1)
print map(str, numeros)
print map(float, numeros)
print map(f, numeros)
print ', '.join(map(str, numeros))
#
print "-"join("1,2,3,4".split(","))
In [47]:
s = 'Soy {0} y vivo en {1} {2}'
print s.format('Perico', 'Valparaiso')
print s.format('Erika', 'Berlin')
print s.format('Wang Dawei', 'Beijing')
In [48]:
s = '{nombre} estudia en la {u}'
# Datos pueden pasarse ordenados
print s.format(nombre='Perico', u='UTFSM')
print s.format(nombre='Fulana', u='PUCV')
# También es posible cambiar el orden
print s.format(u='UPLA', nombre='Yayita')
# O con magia (conocimiento avanzado)
d = {"nombre":"Mago Merlin", "u":"Camelot University"}
print s.format(**d)
Para cambiar la capitalización de un string, es posible utilizar los siguientes métodos:
.upper()
: TODO EN MAYUSCULA..lower()
: todo en minuscula.swapcase()
: cambia el order que tenia la capitalización..capitalize()
: Coloca únicamente mayuscula en la primera letra del string.
In [51]:
palabra = '1. raMo de ProGra'
print palabra.upper()
print palabra.lower()
print palabra.swapcase()
print palabra.capitalize()
Queremos conocer cuales son las palabras más comunes en un idioma. Para eso, necesitamos saber cuantas veces aparece cada palabra en una frase. Desarrolle una función contar_palabras que al ser aplicada sobre un string, entregue un diccionario con las palabras y la cantidad de veces que aparece en la frase. Omita espacios y signos de puntuación y exclamación.
t = 'El sobre, en el aula, esta sobre el pupitre.'
contar_palabras(t)
{'el': 3, 'en': 1, 'esta': 1, 'aula': 1, 'sobre': 2, 'pupitre': 1}
¿Cómo realizaría ahora usted esta difícil tarea?
In [ ]:
def contar_palabras(s):
return s
t = 'El sobre, en el aula, esta sobre el pupitre.'
contar_palabras(t)
In [53]:
def contar_palabras(s):
s = s.lower()
for signo in [",",".",";","!","?","'",'"']:
s = s.replace(signo,"")
palabras = s.split()
contador = {}
for palabra_sucia in palabras:
palabra = palabra_sucia
if palabra in contador:
contador[palabra] += 1 # Aumentamos
else:
contador[palabra] = 1 # Inicializamos
return contador
t = 'El sobre, en el aula, !! Esta sobre el pupitre.'
contar_palabras(t)
Out[53]:
Escriba un programa que tenga el siguiente comportamiento:
INPUT:
Numero de alumnos: 3
Nombre alumno 1: Isaac Newton
Ingrese las notas de Isaac: 98 94 77
Nombre alumno 2: Nikola Tesla
Ingrese las notas de Nikola: 100 68 94 88
Nombre alumno 3: Albert Einstein
Ingrese las notas de Albert: 83 85
OUTPUT:
El promedio de Isaac es 89.67
El promedio de Nikola es 87.50
El promedio de Albert es 84.00
In [ ]:
# Solución Alumnos
In [54]:
# Solución
# Guardar datos
N = int(raw_input("Numero de alumnos: "))
notas_alumnos = []
for i in range(N):
nombre = raw_input("Nombre alumno {0}:".format(i+1))
nombre_pila = nombre.split(" ")[0]
notas_str = raw_input("Ingrese las notas de {0}: ".format(nombre_pila))
notas_int = []
for nota in notas_str.split(" "):
notas_int.append(int(nota))
promedio = sum(notas_int)/float(len(notas_int))
notas_alumnos.append( (nombre_pila, promedio) )
# Imprimir promedios
for nombre, promedio in notas_alumnos:
print "El promedio de {0} es {1:.2f}".format(nombre, promedio)
Una cadena de ADN es una secuencia de bases nitrogenadas llamadas adenina, citosina, timina y guanina. En un programa, una cadena se representa como un string de caracteres 'a', 'c', 't' y 'g'. A cada cadena, le corresponde una cadena complementaria, que se obtiene intercambiando las adeninas con las timinas, y las citosinas con las guaninas:
cadena = 'cagcccatgaggcagggtg'
complemento = 'gtcgggtactccgtcccac'
Escriba la función cadena_al_azar(n) que genere una cadena aleatoria de ADN de largo n:
Ejemplo de uso:
cadena_al_azar(10)
puede regresar 'acgtccgcct', 'tgttcgcatt', etc.
Pista:
from random import choice
choice('atcg') regresa al azar una de las letras de "atcg"
In [57]:
# Definicion de funcion
from random import choice
def cadena_al_azar(n):
bases_n=''
for i in range(n):
base=choice('atgc')
bases_n+=base
return bases_n
# Casos de uso
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(10)
print cadena_al_azar(10)
print cadena_al_azar(10)
print cadena_al_azar(10)
In [ ]:
from random import choice
# Definicion de funcion
def cadena_al_azar(n):
adn = ""
for i in range(n):
adn += choice("acgt")
return adn
# Casos de uso
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(10)
print cadena_al_azar(10)
print cadena_al_azar(10)
print cadena_al_azar(10)
In [ ]:
from random import choice
# Definicion de funcion
def cadena_al_azar(n):
bases = []
for i in range(n):
bases.append(choice("acgt"))
adn = "".join(bases)
return adn
# Casos de uso
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(1)
print cadena_al_azar(10)
print cadena_al_azar(10)
print cadena_al_azar(10)
print cadena_al_azar(10)
Escriba la función complementaria(s)
que regrese la cadena complementaria de c: el complementario de "a" es "t" (y viceversa), y el complementario de "c" es "g" (y viceversa).
cadena = 'cagcccatgaggcagggtg'
print complementaria(cadena)
'gtcgggtactccgtcccac'
In [ ]:
# Solucion estudiantes
def cadena_(n):
adn = ""
for i in range(n):
adn += choice("acgt")
return adn
In [58]:
def complementaria(adn):
rna = ""
for base in adn:
if base=="a":
rna += "t"
elif base=="t":
rna += "a"
elif base=="c":
rna += "g"
else:
rna += "c"
return rna
adn = cadena_al_azar(20)
print adn
print complementaria(adn)
In [59]:
def complementaria(adn):
pares = {"a":"t", "t":"a", "c":"g", "g":"c"}
rna = ""
for base in adn:
rna += pares[base]
return rna
adn = cadena_al_azar(20)
print adn
print complementaria(adn)
In [60]:
def complementaria(adn):
rna = adn.replace("a","T").replace("t","A").replace("c","G").replace("g","C")
return rna.lower()
adn = cadena_al_azar(20)
print adn
print complementaria(adn)
In [ ]: