Sei sulla pagina 1di 11

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.02. Abra el Intrprete Interactivo de Python, y realice algunas acciones simples.


Ingrese la rden help(). Ingrese la rden import this.

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, :)

1.04. Revise la documentacin disponible en esta pgina.

1.05. Hacer un programa que muestre "Esto es un cao". Ejectelo. Qu sucede?


Cmo lo solucion?

2. Tipos de Datos

2.01. Escriba un programa que muestre la siguiente figura:


\ | /
@ @
*
\"""/

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.04. Hacer un programa que le pida un nmero al usuario (usando la funcin


"raw_input") y muestre ese nmero menos dos, ms dos, multiplicado por dos,
dividido por dos de forma entera, dividido por dos de forma decimal, y elevado a la
potencia de dos. Por ejemplo, para el nmero 7, debera mostrar:
5
9
14
3
3.5
49

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.01. Mostrar los nmeros potencia de 2 menores a 10000 de la siguiente manera:


0001
0002
0004
0008
...

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.06. Escribir un programa que le pregunte un nmero al usuario. Si el nmero es 5,


que muestre "Suerte!"; si el nmero es mayor a 10, que muestre "Grande!"; Para los
otros casos que muestre "Sin suerte, :("

3.07. Pedirle una palabra al usuario e indicar si es un palndromo.

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.09. Un nmero palndromo se lee igual en los dos sentidos. El palndromo ms


grande formado del producto de nmeros de dos dgitos es 9009 (91 x 99). Encontrar
el palndromo ms grande formado por el producto de dos nmeros de tres dgitos.

3.10. Escribir un programa que le pregunte un nmero al usuario. Si el nmero es 5,


que muestre "Suerte!"; si el nmero es mayor a 10, que le vuelva a pedir el nmero al
usuario; Para los otros casos que muestre "Sin suerte, :("

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

Ejercicios resueltos de programacin, en Python y en espaol,


I.
Hola. Este es el primero de la serie de artculos que presentar estos das sobre una coleccin de
ejercicios muy bsicos de programacin, para resolver con Python (o cualquier otro lenguaje). Decir que
son muy sencillos y sirven para afianzar conocimientos bsicos de sintaxis y razonamiento. Si eres novel
en programacin enPython, este post es para t. De lo contrario, te resultarn triviales los
planteamientos expuestos.

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.

En este ejercicio tenemos que tener en cuenta que:

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: ')

# Hacemos un cast, convirtiendo la cadena en un nmero largo.


dato = long(dato)

# Comprobamos si el nmero introducido es menor a un milln.


if dato >= 1000000:
print "El nmero debe de ser menor a 1000000"
else:
# Das.
ndias, aux = divmod(dato, 86400)
# Horas.
nhoras, aux = divmod(aux, 3600)
# Minutos y segundos.
nmin, nseg = divmod(aux, 60)
# Mostramos resultado.
print '%d das, %d horas, %d minutos, %d segundos' % \
(ndias, nhoras, nmin, nseg)

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()

# Obtenemos mximo y mnimo.


minimo = numeros[0]
maximo = numeros[2]

# Obtenemos la media aritmtica.


media = round((numeros[0] + numeros[1] + numeros[2]) / float(3),3)

# 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: ')

# Recorremos la tabla hashing (diccionario), construyendo la conjugacin verbal.


for i in pronombre:
print i, palabra[0:len(palabra)-2] + terminaciones[i]

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): ')

# Obtenemos los dgitos.


nbinario = nbinario.split(',')
if len(nbinario) == 1: nbinario = list(nbinario[0])

# Inicializamos algunos contadores.


decimal = 0
potencia = 0

# Le damos la vuelta al nmero binario.


nbinario.reverse()

# Calculamos el nmero decimal, a partir del nmero binario.


for i in nbinario:
decimal += pow(2,potencia) if i == '1' else 0
potencia += 1

# 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 ao dentro del siglo XXI.


anyo = 2000 + int(dato[len(dato)-2:])
# Decodificamos mes.
mes = int(dato[len(dato)-4:len(dato)-2])

# 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.

# Declaramos datos bsicos (euros) con los que trabajar.


billetes_y_monedas = [500,200,100,50,20,10,5, 2, 1, 0.50, 0.20, 0.10,
0.05, 0.02, 0.01]

# Creamos un monedero, donde meter el dinero.


monedero = []

# Pedimos la cantidad.
dato = raw_input(u'Introducir importe (euros): ')

# Buscamos parte decimal y entera.


dato = dato.split('.')

# Decimal...
try: parte_decimal = float('0.'+dato[1])
except: parte_decimal = 0.0

# Entera...
parte_entera = long(dato[0])

# Algoritmo de asignacin de dinero.


for i in billetes_y_monedas:
# Obtenemos nmero de billetes monedas y los guardamos.
unidades, resto = divmod(parte_entera, i)
if unidades != 0:
monedero.append((i,unidades))
# Asignamos lo que nos queda.
parte_entera = resto

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)

# E imprimimos resultado (una tupla).


print tiempo

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

5 Disear dos funciones "EurosAPesetas()" y "PesetasAEuros()" que realicen las conversiones de m


de forma que se puedan utilizar directamente dentro de una expresion del tipo: "Imprimir valEu
EurosAPts(valEuros)"

5 Disear una funcin "EsBisiesto()" que decida si un ao es bisiesto o no

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

8 Repetir la modularizacin anterior utilizando funciones que pasen parmetros


Solucin: Nomina3.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)

Potrebbero piacerti anche