Ejercicios Python
Ejercicios Python
Ejercicios Python
Los siguientes son algunos ejercicios simples para resolver en Python, ms o menos
ordenados con la misma estructura que el curso.
El resultado a cada ejercicio est enlazado desde el nmero de cada ejercicio. La idea
es que revisen la solucin luego de resolverlo por ustedes mismos, o al menos de
intentar (pensando) varias veces cmo resolverlo.
1. Intro
1.01. Hacer un programa que muestre "Hola mundo", y ejecutarlo para ver el mensaje
en la pantalla. Cmo lo ejecut? Qu otras maneras haba de ejecutarlo?
1.03. Suscrbase a la lista de Python Argentina y mande el primer mail con un "Hola
mundo". Ms instrucciones, aqu. Conctese por IRC al servidor irc.freenode.org, y
entre al canal #pyar. Ahora ya sabe cmo pedir ayuda, :)
2. Tipos de Datos
2.02. Siendo a="Hola", b="mundo", c=87 y d=2.33145, armar y mostrar las siguientes
cadenas:
"Hola mundo" (usando a y b)
"-Hola-mundo-" (usando a y b)
"El resultado es: 87" (usando c)
"El resultado es: 87min (5220seg)" (usando c ambas veces)
"La temperatura es: 2.3"
2.03. Hacer un programa que le pida una cadena al usuario (usando la funcin
"raw_input") y la imprima a pantalla al revs. Por ejemplo, para el texto "Esto es
asi", debera mostrar:
"isa se otsE"
2.05. Pedirle un nmero al usuario, elevarlo al cuadrado, y mostrar los dgitos al reves
y separados por espacio. Por ejemplo, si el usuario ingresa 17, la salida tiene que
ser "9 8 2".
3. Controles de flujo
3.02. Hacer un programa que le pida una cadena al usuario, y arme una tringulo
creciente y decreciente con ese texto. Por ejemplo, para el texto "klop", el resultado
sera:
k
kl
klo
klop
klo
kl
k
3.03. Si listamos todos los nmeros naturales menores a 10 que son multiplos de 3 o
5, tenemos 3, 5, 6 y 9. La suma de estos mltiplos es 23. Encontrar y mostrar la suma
de todos los multiplos de 3 o 5 menores a 1000.
3.04. Se escriben todos los nmeros enteros positivos en una lista, ordenados y
empezando por el 1 (en la posicin 0), luego se tachan todos los que tienen el dgito 9
al menos una vez, y despus se tachan todos los mltiplos de 3. Considerando
solamente los nmeros no tachados, qu nmero queda en la posicin un milln?
3.05. Encontrar dos nmeros X e Y enteros mayores o iguales que 2 tales que XY + YX
= 94932
3.08. Pedirle un texto al usuario, y mostrar el promedio de largo (hasta dos decimales)
de todas las palabras (separando por espacio, tab, enter, etc, no por signos de
ortografa) de ese texto. Por ejemplo, para el input "Hola, hermano, vine a visitarte",
la salida sera 5.40.
3.11. Pedirle un texto al usuario, y hacer una estadstica sobre cuantas veces aparece
cada caracter, mostrando el resultado de mayor a menor respetando la alineacin a la
derecha de los nmeros. Por ejemplo, para "nosotros no somos como los orozco, yo
los conozco, son ocho los monos", debera mostrar:
o 23
12
s 9
n 5
c 5
m 3
l 3
z 2
r 2
, 2
y 1
t 1
h 1
4. Encapsulando cdigo
4.01. Hacer una funcin que recibe un nmero y contesta "par" o "impar" en funcin
de si el nmero es par o no.
4.02. A la misma funcin que en el punto anterior, agregarle un docstring (con pruebas
incluidas, ver el mdulo doctest).
4.03. Hacer una funcin que recibe dos nmeros y devuelve "mayor" (si el primer
nmero es mayor que el segundo), "menor", o "iguales".
4.04. Hacer una funcin que recibe un nmero y contesta "primo" o "no primo" en
funcin de si el nmero es primo o no.
4.05. Al listar los primeros seis nmeros primos (2, 3, 5, 7, 11 y 13), podemos ver que
el sexto (6) primo es 13. Cual es el 10000 nmero?
4.06. Hacer un programa que genere un nmero entero al azar (mdulo random) entre
0 y 1000, y le vaya pidiendo al usuario que ingrese nmeros enteros para adivinarlo.
Si el usuario ingresa un nmero menor que el objetivo, muestra "Es ms alto!"; si el
usuario ingresa uno mayor, muestra "Es ms bajo!"; si el usuario acierta, muestra
"Viva Python!", y termina. Si el usuario no acert en 7 intentos, que muestre "Alpiste
perdiste! Booo" y termine.
4.07. Hacer una funcin que reciba un texto y devuelva el mismo texto pero con cada
palabra invertida. Por ejemplo, llamndola con "Esto es una prueba", debe devolver
"otsE se anu abeurp".
4.08. Hacer una funcin que reciba dos palabras y que imprima linea por linea las
primeras, segundas, etc. letras de ambas palabras. Por ejemplo, llamndola con "Hola"
y "mundo", el resultado sera:
H m
o u
l n
a d
o
4.09. Encuentre la cantidad de enteros entre 1 < n < 107 para los cuales n y n+1 tienen
la misma cantidad de divisores positivos enteros. Por ejemplo, 14 tiene el 1, 2, 7 y 14,
mientras que 15 tiene 1, 3, 5 y 15.
4.10. Cuando en un nmero la diferencia entre cada par de dgitos consecutivos es
uno, se lo llama nmero "step" (como el 123234, el 9876787654, etc.). Cuntos
nmeros "step" menores a un milln existen?
4.11. Pedirle un texto al usuario y mostrar el mismo texto pero sin las vocales. Por
ejemplo, para un input de "Yo estaba all", debera mostrar "Y stb ll".
---
Ejercicios Python - Facundo Batista - Bitcora de Vuelo
Licencia: Atribucin-No Comercial 2.5 Genrica
Los enunciados los he obtenido del libro Esquemas Algortmicos Fundamentales - Secuencias e
Iteracin, de P.C. Scholl y J.P. Peyrin, editorial Masson.
Ejercicio 1.
Escribir un algoritmo que, para cualquier nmero de segundos inferior a un milln, calcule su equivalente
en das, horas, minutos y segundos.
1 minuto = 60 segundos.
1 hora = 60 minutos = 3600 segundos.
1 dia = 24 horas = 1440 minutos = 86400 segundos.
# Pedimos datos.
dato = raw_input(u'Nmero de segundos: ')
Ejercicio 2.
Escribir un algoritmo que imprima el mnimo, el mximo y la media de tres nmeros.
# Obtenemos nmeros.
numeros = []
for i in ['primer', 'segundo','tercer']:
texto = u'Introduce el %s nmero: ' % (i)
numeros.append(float(raw_input(texto)))
# Ordenamos.
numeros.sort()
# Visualizamos resultados.
cadena = u'Mnimo: %d, Mximo: %d, Media: %f' % (minimo, maximo, media)
print cadena
Ejercicio 3.
Escribir un algoritmo que, dado el infinitivo de un verbo regular de la primera conjugacin, obtenga la
conjugacin en singular y plural de presente de indicativo. Por ejemplo, para el verbo cantar el resultado
es yo canto, tu cantas, el canta, nosotros cantamos, vosotros cantis, ellos cantan.
pronombre = ['yo','tu','el','nosotros','vosotros','ellos']
terminaciones = {'yo':'o',
'tu':'as',
'el':'a',
'nosotros':'amos',
'vosotros':u'is',
'ellos':'an'}
# Pedimos datos.
palabra = raw_input(u'Verbo regular 1ra. conjugacin: ')
Ejercicio 4.
Escribir un algoritmo que, para un nmero binario de 4 cifras, imprima su valor en base 10. Se estudiarn
dos formas del problema segn la representacin de los datos:
-forma 1: los datos son cuatro enteros (0 1). Por ejemplo: 1,1,0,1.
-forma 2: el dato es un entero cuya representacin decimal con cuatro
cifras no contenga ms que 0 1: Por ejemplo: 1101.
# Obtenemos datos.
nbinario = raw_input(u'Nmero binario (4 cifras): ')
# Visualizamos resultado.
cadena = u'Su representacin decimal es %d' % (decimal)
print cadena
Ejercicio 5.
Escribir un algoritmo que decodifique fechas del siglo XXI. El dato es un entero comprendido entre 10100
y 311299. El resultado es una secuencia de caracteres: nmero del da dentro del mes, del mes dentro
del ao y del ao dentro del siglo. Por ejemplo, para el dato 30485, el resultado es el texto 3-4-2085.
# Obtenemos dato.
dato = raw_input('Introduce dato: ')
# Decodificamos da.
dia = int(dato[:len(dato)-4])
# Mostramos resultado.
cadena = '%d-%d-%d' % (dia, mes, anyo)
print cadena
Ejercicio 6.
Escribir un algoritmo que, para una suma de dinero dada, indique cmo descomponerla en billetes y
monedas corrientes. Se desea utilizar el mnimo de billetes y monedas. No hay ninguna limitacin
respecto al nmero de billetes y monedas disponibles.
# Pedimos la cantidad.
dato = raw_input(u'Introducir importe (euros): ')
# Decimal...
try: parte_decimal = float('0.'+dato[1])
except: parte_decimal = 0.0
# Entera...
parte_entera = long(dato[0])
if parte_decimal > 0:
for i in billetes_y_monedas:
# Obtenemos nmero de monedas y los guardamos.
unidades, resto = divmod(parte_decimal, i)
if unidades != 0:
monedero.append((i,unidades))
# Asignamos lo que nos queda.
parte_decimal = round(resto,2)
# Visualizamos el resultado.
cadena = ''
for i in monedero:
if i[0] >= 5: cadena += '%d billete/s de %d euros' % (i[1],i[0])
if i[0] < 5: cadena += '%d moneda/s de %s euros' % (i[1],i[0])
cadena += '\n'
print cadena
Ejercicio 7.
Escribir un algoritmo que simule el funcionamiento de una calculadora. El dato es una serie de tres
caracteres: una cifra, un smbolo de operacin y otra cifra. El resultado es el valor de la expresin dada.
# Pedimos datos.
dato = raw_input(u'Introduce operacin: ')
# Inicializamos resultado.
resultado = 0
# Suma?
serie = dato.split('+')
if len(serie) == 2: resultado = long(serie[0]) + long(serie[1])
else:
# Resta?
serie = dato.split('-')
if len(serie) == 2: resultado = long(serie[0]) - long(serie[1])
else:
# Multiplicacin?
serie = dato.split('*')
if len(serie) == 2: resultado = long(serie[0]) * long(serie[1])
else:
# Divisin?
serie = dato.split('/')
if len(serie) == 2: resultado = long(serie[0]) / long(serie[1])
# Mostramos resultado.
print "El resultado es",resultado
Ejercicio 8.
Consideremos una hora expresada en forma de tripleta . Escribir un algoritmo que imprima la hora
correspondiente al siguiente segundo. Por ejemplo, para la entrada 13,43,24 tiene que devolver
13,43,25.
Se supone que lo que introducimos es una hora correcta. Darse cuenta que no se chequean los datos
introducidos, por cuestin de simplicidad.
# Pedimos datos.
tiempo = raw_input('Introduce tiempo: ')
# Obtenemos datos.
aux = tiempo.split(',')
horas = int(aux[0])
minutos = int(aux[1])
segundos = int(aux[2])
# Aumentamos un segundo.
segundos += 1
# Casos.
if segundos != 60:
tiempo = (horas, minutos, segundos)
else:
if minutos == 59 and horas == 23:
tiempo = (0, 0, 0)
else:
if minutos == 59:
tiempo = (horas + 1, 0, 0)
else:
tiempo = (horas, minutos + 1, 0)
Ejercicio 9.
Escribir una funcin que determine si una letra dada es consonante.
A la funcin le faltara controlar las letras con acentuacin (tildes, diresis, etc).
def es_consonante(letra):
if letra.lower() not in ['a','e','i','o','u']:
return True
else:
return False
Ejercicio 10.
Escribir una funcin que calcule el factorial de un nmero. Por ejemplo, 5! = 5*4*3*2*1 = 120.
def factorial(numero):
return 1 if numero <=0 else numero * factorial(numero -1)
4 Para cada uno de los puntos siguientes escribir un programa que pida los datos necesarios y calcule el rea y el
. de la figura indicada
a) Un cuadrado b) Un rectngulo c) Un tringulo d) Un crculo
Solucion: a) cuadrado.c
Tema 6. Funciones
1. Disear una funcin que calcule el promedio de varios nmeros introducidos por el teclado. Hac
versiones, una para un nmero fijo de valores y otra para un nmero cualquiera.de valores.
2 Escribir una funcin que intercambie el valor de dos variables, es decir si X=5 e Y=7 tras aplica
funcin, por ejemplo haciendo "intercambiar(X,Y)" se tiene que X=7 e Y=5.
3 Disear una funcin que calcule la potencia ensima de un nmero, es decir que
calcule X n para X, real y n entero
4 Disear una funcin "aMayusculas()" que convierta una cadena de texto en maysculas
6 Escribir una funcin "EsMultiplo" que sirva para determinar si un nmero es mltiplo de otra. Ut
un programa que pida la antiguedad de un trabajador y calcule cuantos trienios de antiguedad
7 Modularizar el programa nomina1.c utilizando tres funciones. Una para la entrada, una para los
una para la salida de resultados
Solucin: Nomina2.c
9 Hacer un programa salarios.c que utilice las funciones anteriores dentro de un bucle para calcul
nominas de un numero indeterminado de trabajadores
1 Escribir dos funciones Entrada() y Salida() que incluyan todas las operaciones de entrada de dat
0 salida de resultados para el programa del ejercicio n 1.5 (terminal punto de venta)