Examen
Examen
Examen
-25 # int
1.167 # float
2) Determina mentalmente (sin programar) el resultado que aparecer por pantalla a partir de las siguientes
variables:
a = 10
b = -5
c = "Hola "
d = [1, 2, 3]
print(a * 5) # 50
print(a - b) # 15
print(c[-1]) # 3
print(c[1:]) # [2, 3]
print(d + d) # [1, 2, 3, 1, 2, 3]
3) El siguiente cdigo pretende realizar una media entre 3 nmeros, pero no funciona correctamente. Eres
capaz de identificar el problema y solucionarlo?
In [3]:
numero_1 = 9
numero_2 = 3
numero_3 = 6
media = (numero_1 + numero_2 + numero_3) / 3 # Hay que realizar primero la suma de los 3 nmeros
antes de dividir
print("La nota media es", media)
La nota media es 6.0
4) A partir del ejercicio anterior, vamos a suponer que cada nmero es una nota, y lo que queremos es
obtener la nota final. El problema es que cada nota tiene un valor porcentual:
Ayuda: La funcin llamada sum(lista) devuelve una suma de todos los elementos de la lista Prubalo!
In [10]:
matriz = [
[1, 1, 1, 3],
[2, 2, 2, 7],
[3, 3, 3, 9],
[4, 4, 4, 13]
]
print(matriz)
[[1, 1, 1, 3], [2, 2, 2, 6], [3, 3, 3, 9], [4, 4, 4, 12]]
6) Al realizar una consulta en un registro hemos obtenido una cadena de texto corrupta al revs. Al parecer
contiene el nombre de un alumno y la nota de un exmen. Cmo podramos formatear la cadena y
conseguir una estructura como la siguiente?:
Ayuda: Para voltear una cadena rpidamente utilizando slicing podemos utilizar un tercer ndice -1: cadena[::-1]
In [11]:
cadena = "zerP nauJ,01"
cadena = "zerP nauJ,01"
1) Realiza un programa que lea 2 nmeros por teclado y determine los siguientes aspectos (es suficiene
con mostrar True o False):
Lee por pantalla otro numero_usuario, especifica que sea entre 1 y 9 (asegrate que sea un nmero
entero)
In [9]:
# Completa el ejercicio aqu
numero_magico = 12345679
numero_usuario = int(input("Introduce un nmero del 1 al 9: "))
numero_usuario *= 9
numero_magico *= numero_usuario
print("El nmero mgico es:", numero_magico)
Introduce un nmero del 1 al 9: 5
El nmero mgico es: 555555555
1) Realiza un programa que lea dos nmeros por teclado y permita elegir entre 3 opciones en un men:
Mostrar una resta de los dos nmeros (el primero menos el segundo)
In [3]:
# Completa el ejercicio aqu
n1 = float(input("Introduce un nmero: ") )
n2 = float(input("Introduce otro nmero: ") )
opcion = 0
print("Qu quieres hacer? \n1) Sumar los dos nmeros\n2) Restar los dos nmeros\n3) Multiplicar los dos
nmeros")
opcion = int(input("Introduce un nmero: ") )
if opcion == 1:
print("La suma de",n1,"+",n2,"es",n1+n2)
elif opcion == 2:
print("La resta de",n1,"-",n2,"es",n1-n2)
elif opcion == 3:
print("El producto de",n1,"*",n2,"es",n1*n2)
else:
print("Opcin incorrecta")
Introduce un nmero: 5
Introduce otro nmero: 5
Qu quieres hacer?
1) Sumar los dos nmeros
2) Restar los dos nmeros
3) Multiplicar los dos nmeros
Introduce un nmero: 3
El producto de 5.0 * 5.0 es 25.0
2) Realiza un programa que lea un nmero impar por teclado. Si el usuario no introduce un nmero impar,
debe repetise el proceso hasta que lo introduzca correctamente.
In [5]:
# Completa el ejercicio aqu
numero = 0
while numero % 2 == 0: # Mientras sea par repetimos el proceso
numero = int(input("Introduce un nmero impar: ") )
Introduce un nmero impar: 4
Introduce un nmero impar: 2
Introduce un nmero impar: 3
3) Realiza un programa que sume todos los nmeros pares desde el 0 hasta el 100:
Sugerencia: Puedes utilizar la funciones sum() y range() para hacerlo ms fcil. El tercer parmetro en la funcin
range(inicio, fin, salto) indica un salto de nmeros, prubalo.
In [1]:
# Completa el ejercicio aqu
# range(0, 101, 2)
print(suma)
2550
2550
4) Realiza un programa que pida al usuario cuantos nmeros quiere introducir. Luego lee todos los
nmeros y realiza una media aritmtica:
In [5]:
# Completa el ejercicio aqu
suma = 0
numeros = int(input("Cuntos nmeros quieres introducir? ") )
for x in range(numeros):
suma += float(input("Introduce un nmero: ") )
print("Se han introducido",numeros,"nmeros que en total han sumado",suma,"y la media
es",suma/numeros)
Cuntos numeros quieres introducir? 4
Introduce un nmero: 3
Introduce un nmero: 2
Introduce un nmero: 4
Introduce un nmero: 6
Se han introducido 4 nmeros que en total han sumado 15.0 y la media es 3.75
5) Realiza un programa que pida al usuario un nmero entero del 0 al 9, y que mientras el nmero no sea
correcto se repita el proceso. Luego debe comprobar si el nmero se encuentra en la lista de nmeros y
notificarlo:
Consejo: La sintaxis "valor in lista" permite comprobar fcilmente si un valor se encuentra en una lista (devuelve
True o False)
In [7]:
# Completa el ejercicio aqu
numeros = [1, 3, 6, 9]
while True:
numero = int(input("Escribe un nmero del 0 al 9: "))
if numero >= 0 and numero <= 9:
break
if numero in numeros:
print("El nmero",numero,"se encuentra en la lista",numeros)
else:
print("El nmero",numero,"no se encuentra en la lista",numeros)
Escribe un nmero del 0 al 9: 3
El nmero 3 se encuentra en la lista [1, 3, 6, 9]
6) Utilizando la funcin range() y la conversin a listas genera las siguientes listas dinmicamente:
Todos los nmeros impares entre -20 y 0 [-19, -17, -15, ..., -1]
lista_3 = []
print(lista_3)
['h', 'o', 'l', 'a', ' ', 'u', 'n']
Crea un conjunto llamado usuarios con los usuarios Marta, David, Elvira, Juan y Marcos
Aade a Marcos como un nuevo administrador, pero no lo borres del conjunto de usuarios.
Muestra todos los usuarios por pantalla de forma dinmica, adems debes indicar cada usuario es
administrador o no.
Notas: Los conjuntos se pueden recorrer dinmicamente utilizando el bucle for de forma similar a una lista. Tambin
cuentan con un mtodo llamado .discard(elemento) que sirve para borrar un elemento.
# Completa el ejercicio aqu
usuarios = {"Marta", "David", "Elvira", "Juan", "Marcos"}
administradores = {"Juan", "Marta"}
administradores.discard("Juan")
administradores.add("Marcos")
El arquero tiene la misma vida y ataque que un guerrero, pero la mitad de su defensa y el doble de su
alcance.
guerrero['ataque'] = caballero['ataque'] * 2
guerrero['alcance'] = caballero['alcance'] * 2
arquero['vida'] = guerrero['vida']
arquero['ataque'] = guerrero['ataque']
arquero['defensa'] = guerrero['defensa'] / 2
arquero['alcance'] = guerrero['alcance'] * 2
print("Caballero:\t", caballero)
print("Guerrero:\t", guerrero)
print("Arquero:\t", arquero)
Caballero: {'ataque': 2, 'defensa': 4, 'alcance': 2, 'vida': 4}
Guerrero: {'ataque': 4, 'defensa': 2, 'alcance': 4, 'vida': 2}
Arquero: {'ataque': 4, 'defensa': 1.0, 'alcance': 8, 'vida': 2}
3) Durante la planificacin de un proyecto se han acordado una lista de tareas. Para cada una de estas
tareas se ha asignado un orden de prioridad (cuanto menor es el nmero de orden, ms prioridad).
Eres capaz de crear una estructura del tipo cola con todas las tareas ordenadas pero sin los nmeros de
orden?
Pista: Para ordenar automticamente una lista es posible utilizar el mtodo .sort().
In [19]:
tareas = [
[6, 'Distribucin'],
[2, 'Diseo'],
[1, 'Concepcin'],
[7, 'Mantenimiento'],
[4, 'Produccin'],
[3, 'Planificacin'],
[5, 'Pruebas']
]
print("==Tareas desordenadas==")
for tarea in tareas:
print(tarea[0], tarea[1])
# Completa el ejercicio aqu
from collections import deque
tareas.sort()
cola = deque()
for tarea in tareas:
cola.append(tarea[1])
print("\n==Tareas ordenadas==")
for tarea in cola:
print(tarea)
==Tareas desordenadas==
6 Distribucin
2 Diseo
1 Concepcin
7 Mantenimiento
4 Produccin
3 Planificacin
5 Pruebas
==Tareas ordenadas==
Concepcin
Diseo
Planificacin
Produccin
Pruebas
Distribucin
Mantenimiento
In [1]:
# Completa el ejercicio aqu
print( "{:>20}".format("Hola Mundo") )
print( "{:.3}".format("Hola Mundo") )
print( "{:^20.2}".format("Hola Mundo") )
print( "{:05d}".format(150) )
print( "{:7d}".format(7887) )
print( "{:07.3f}".format(20.02) )
Hola Mundo
Hol
Ho
00150
7887
020.020
2) Crea un script llamado tabla.py que realice las siguientes tareas:
Debe tomar 2 argumentos, ambos nmeros enteros positivos del 1 al 9, sino mostrar un error.
El primer argumento har referencia a las filas de una tabla, el segundo a las columnas.
En caso de no recibir uno o ambos argumentos, debe mostrar informacin acerca de cmo utilizar el
script.
El script contendr un bucle for que itere el nmero de veces del primer argumento.
Dentro del for, aade un segundo for que itere el nmero de veces del segundo argumento.
Dentro del segundo for ejecuta una instruccin print(" * ", end=''), (end='' evita el salto de lnea).
Ahora intenta deducir dnde y cmo aadir otra instruccion print para dibujar una tabla.
Recordatorio: Los argumentos se envan como cadenas separadas por espacios, si quieres enviar varias palabras
como un argumento debers indicarlas entre comillas dobles "esto es un argumento". Para capturar los argumentos
debes utilizar el mdulo sys y su lista argv:
import sys
Solucin: tabla.py
import sys
if len(sys.argv) == 3:
filas = int(sys.argv[1])
columnas = int(sys.argv[2])
if filas < 1 or filas > 9 or columnas < 1 or columnas > 9:
else:
for f in range(filas):
print("")
for c in range(columnas):
else:
3) [Avanzado] Crea un script llamado descomposicion.py que realice las siguientes tareas:
En caso de no recibir un argumento, debe mostrar informacin acerca de cmo utilizar el script.
El objetivo del script es descomponer el nmero en unidades, decenas, centenas, miles... tal que por
ejemplo si se introduce el nmero:
> 3647
El programa deber devolver una descomposicin lnea a lnea como la siguiente utilizando las tcnicas de
formateo:
> 0007
0040
0600
3000
Pista: Que el valor sea un nmero no significa necesariamente que deba serlo para formatearlo. Necesitars jugar
muy bien con los ndices y realizar muchas conversiones entre tipos cadenas, nmeros y viceversa
Solucin: descomposicion.py
import sys
if len(sys.argv) == 2:
numero = int(sys.argv[1])
else:
# Aqui va la lgica
cadena = str(numero)
longitud = len(cadena)
for i in range(longitud):
else:
1) Realiza una funcin llamada area_rectangulo() que devuelva el rea del rectangulo a partir de una base y
una altura. Calcula el rea de un rectngulo de 15 de base y 10 de altura.
In [7]:
print( area_rectangulo(15,10) )
150
2) Realiza una funcin llamada area_circulo() que devuelva el rea de un crculo a partir de un radio. Calcula
el rea de un crculo de 5 de radio:
Nota: El rea de un crculo se obtiene al elevar el radio a dos y multiplicando el resultado por el nmero pi. Puedes
utilizar el valor 3.14159 como pi o importarlo del mdulo math:
import math
print(math.pi)
> 3.1415...
In [6]:
def area_circulo(radio):
return (radio**2) * math.pi
print( area_circulo(5) )
78.53981633974483
3) Realiza una funcin llamada relacion() que a partir de dos nmeros cumpla lo siguiente:
Comprueba la relacin entre los nmeros: '5 y 10', '10 y 5' y '5 y 5'
In [8]:
Nota: El nmero intermedio de dos nmeros corresponde a la suma de los dos nmeros dividida entre 2
In [13]:
5) Realiza una funcin llamada recortar() que reciba tres parmetros. El primero es el nmero a recortar, el
segundo es el lmite inferior y el tercero el lmite superior. La funcin tendr que cumplir lo siguiente:
In [14]:
6) Realiza una funcin separar() que tome una lista de nmeros enteros y devuelva dos listas ordenadas. La
primera con los nmeros pares, y la segunda con los nmeros impares:
Por ejemplo:
In [20]:
def separar(lista):
numeros.sort()
pares = []
impares = []
for n in numeros:
if n%2 == 0:
pares.append(n)
else:
impares.append(n)
return pares, impares
1) Localiza el error en el siguiente bloque de cdigo. Crea una excepcin para evitar que el programa se
bloquee y adems explica en un mensaje al usuario la causa y/o solucin:
In [5]:
In [8]:
3) Localiza el error en el siguiente bloque de cdigo. Crea una excepcin para evitar que el programa se
bloquee y adems explica en un mensaje al usuario la causa y/o solucin:
In [12]:
4) Localiza el error en el siguiente bloque de cdigo. Crea una excepcin para evitar que el programa se
bloquee y adems explica en un mensaje al usuario la causa y/o solucin:
In [15]:
5) Realiza una funcin llamada agregar_una_vez() que reciba una lista y un elemento. La funcin debe
aadir el elemento al final de la lista con la condicin de no repetir ningn elemento. Adems si este
elemento ya se encuentra en la lista se debe invocar un error de tipo ValueError que debes capturar y
mostrar este mensaje en su lugar:
In [22]:
agregar_una_vez(elementos, 10)
agregar_una_vez(elementos, -2)
agregar_una_vez(elementos, "Hola")
print(elementos)
Error: Imposible aadir elementos duplicados => -2
[1, 5, -2, 10, 'Hola']