Fundamentos de Programación

Ejercicios Unidad 04

EJERCICIO 1

Implemente un programa que reciba una lista de cualquier longitud compuesta únicamente de ceros (0) y unos (1) en un orden aleatorio.
Recorriendo la lista una sola vez, el programa debe determinar el tamaño de la mayor racha (cantidad de unos consecutivos) detectados en la lista.

Ejemplos de ejecución:
Si lista = [0, 1, 1, 0, 1, 1, 1, 0, 0, 1] entonces el tamaño de la mayor racha es 3.
Si lista = [1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1] entonces el tamaño de la mayor racha es 5.

RESOLUCIÓN

#Lista de ejemplo con ceros y unos
lista = [1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1]
#Inicializamos los contadores
cont = 0 #Almacena la racha actual de unos consecutivos
max_racha = 0 #Guarda la mayor racha encontrada hasta el momento
#Recorremos la lista una sola vez
for numero in lista:
if numero == 1:
cont += 1 #Si encontramos un 1, aumentamos la racha actual
if cont > max_racha: #Verificamos si es la mayor
max_racha = cont
else:
cont = 0 #Si encontramos un 0, la racha se reinicia
#Al finalizar el recorrido, max_racha contiene el valor más alto alcanzado
print("La mayor racha de unos consecutivos es:", max_racha)

EJERCICIO 2

Escriba una función contarDigitos(número), la cual devuelva la cantidad de dígitos que tiene un número.

RESOLUCIÓN

#Se define la función:
def contarDigitos(numero):
#Contador para obtener el dígito
digit=1
"""While que itere mientras el número sea mayor o igual a 10, dentro de este se divide el número para 10 y se
aumenta el contador de dígitos cada vez que esto sucede hasta que el resultado final sea de un solo dígito,
entonces se devuelve el número de dígitos"""
while numero>=10:
numero/=10
digit+=1
return digit
#Ejemplo de ejecución:
print("Dígitos:",contarDigitos(345))

EJERCICIO 3

Escriba un programa que cuente el número de palabras que inician y terminan con una vocal (independiente de si están en mayúsculas o minúsculas).

RESOLUCIÓN

#Lista de palabras (strings). Contaremos cuántas inician y terminan con vocal.
palabras = ['Agua', 'Barco', 'Amigo',
'1221', 'pip', 'motor',
'Oeste', 'Salinas', 'Iglesia',
'camisa', 'aro', 'nacion']
#Conjunto de vocales en minúsculas para la comparación.
#Si quieres considerar tildes: vocales = "aeiouáéíóúü"
vocales = "aeiou"
#Contador de palabras que cumplen la condición.
contador = 0
#Recorremos cada palabra UNA sola vez.
for palabra in palabras:
#1.Normalizamos la palabra a minúsculas para comparar sin preocuparnos por mayúsculas/minúsculas.
p = palabra.lower()
#2.Obtenemos el primer y el último carácter.
primera = p[0]
ultima = p[-1]
#3.Verificamos la condición.
if primera in vocales and ultima in vocales:
#4.Si la condición se cumple, sumamos 1 al contador.
contador += 1
#5.Mostramos el resultado final.
print("Hay", contador, "palabras que inician y terminan con vocal")

EJERCICIO 4

Escriba un programa que solicite números enteros al usuario de manera repetida, la entrada de datos debe detenerse cuando el usuario ingrese el valor -1.

Una vez finalizada la entrada de los números, el programa debe mostrar:

  • La cantidad de números pares ingresados.

  • La cantidad de números impares ingresados.

  • El número mayor de la lista.

  • El promedio de todos los números (excluyendo el -1).

RESOLUCIÓN

"""
Programa: leer números enteros desde teclado y analizarlos.
El usuario puede ingresar cualquier cantidad de números.
Cuando ingrese -1, el programa termina la entrada de datos.
Resultados a mostrar:
- Cantidad de números pares.
- Cantidad de números impares.
- El número mayor ingresado.
- El promedio de todos los números (excepto -1).
"""
#Lista vacía para guardar los números que ingrese el usuario
numeros = []

"""Pedimos el primer número al usuario.
Si desde el inicio ingresa -1, el bucle no comenzará
y significará que no quiere ingresar datos."""
n = int(input("Ingrese un número (-1 para terminar): "))

"""Bucle while: se ejecuta mientras el número no sea -1.
Cada valor válido se agrega a la lista."""
while n != -1:
numeros.append(n)
n = int(input("Ingrese un número (-1 para terminar): "))

"""
Inicializamos contadores:
- pares: cuenta cuántos números son divisibles entre 2.
- impares: cuenta los que no lo son.
"""
pares = 0
impares = 0

"""
Recorremos la lista completa con un for.
En cada número aplicamos la condición:
- Si el número módulo 2 es 0, es par.
- Si no, es impar.
"""
for num in numeros:
if num % 2 == 0:
pares += 1
else:
impares += 1

"""Antes de calcular mayor y promedio,
verificamos que la lista tenga al menos un elemento."""
if len(numeros) > 0:
"""
- max(numeros): devuelve el valor más alto de la lista.
- sum(numeros) / len(numeros): calcula el promedio.
"""
mayor = max(numeros)
promedio = sum(numeros) / len(numeros)

"""Mostramos los resultados finales:
cantidad de pares, impares, el mayor y el promedio."""
print("Cantidad de pares:", pares)
print("Cantidad de impares:", impares)
print("Número mayor:", mayor)
print("Promedio:", promedio)
else:
"""Si la lista está vacía significa que el usuario nunca ingresó
un número distinto de -1, por lo tanto no hay datos válidos."""
print("No se ingresaron números válidos.")

EJERCICIO 5

Asuma que tiene una lista con el consumo de datos de las aplicaciones en su celular durante un mes,
semejante a lo mostrado en el siguiente ejemplo:

junio = ['Facebook-10Megas',
'Spotify-55Megas',
'Spotify-112Megas',
'Whatsapp-12Megas',
...
]

Observe que las aplicaciones en la lista se pueden repetir.

Muestre por pantalla la cantidad de “Megas” que ha utilizado durante el mes por cada aplicación.

RESOLUCIÓN

#Lista de ejemplo
junio = ["Facebook-10Megas","Spotify-55Megas","Spotify-112Megas","Whatsapp-12Megas"]
"""Se crean dos listas: una para las aplicaciones y otra para los datos, esto para poder contabilizar cada
una de las aplicaciones y sus datos
"""
apli=[]
data=[]
#Recorro la lista de consumo de datos las aplicaciones con un for
for i in junio:
#Separo cada elemento para obtener la app en específico y los datos
sep=i.split("-")
app,datos=sep[0],sep[1]
#En los datos extraigo el elemento de Megas para solo tener el número
datos=datos.split("M")[0]
"""Creo una condición, si la app no está en la lista agrego la app y sus datos en la lista
y en cambio si ya está encuentro el indice de esa app para acceder a los datos en la otra lista
y sumo los datos obtenidos en esta iteración a los datos relacionados a la aplicación
"""
if app in apli:
ind=apli.index(app)
data[ind]=int(data[ind])
data[ind]+=int(datos)
else:
apli.append(app)
data.append(datos)
"""Al final recorro con el rango del tamaño de la lista e imprimo cada elemento de ambas listas, lo que es posible ya
que al final ambas listas tendrán el mismo tamaño"""
for i in range(len(apli)):
print(apli[i],data[i])

EJERCICIO 6

Implemente un juego en el que se le pide ingresar un número y tiene 5 intentos para adivinar un número al azar entre 0 y 100
, si no se acierta el número, se le indica si el número a adivinar es mayor o menor al número ingresado y los intentos que quedan.
También se debe verificar que se haya ingresado un número.

RESOLUCIÓN

#Importar random
import random as rd
#Usar randint para definir un rango de números
num=rd.randint(0,100)
#Se crea una variable de control para el while, y un contador de intentos
numAdivina=""
i=5
"""Se definen dos whiles, uno que exista mientras no se adivine el número y queden
intentos, y el segundo while para cuando el número que se coloca en el input de la
variable de control no sea dígito o esté fuera del rango disponible. """
while (numAdivina!=num and i!=0):
while not (numAdivina.isdigit() and 0<=int(numAdivina)<=100):
numAdivina=input("Ingrese un número:")
"""Luego de salir del while interior, se verifica si el número adivinado es igual a la variable
que se generó aleatoriamente, entonces se indica que adivinó y se establece los intentos
a 0 para cumplir la otra condición y salir del bucle principal. """
if int(numAdivina)==num:
print("Adivinaste")
i=0
"""Las otras dos condiciones establecen los mensajes correspondientes a la condición
del número,se restablece la variable de control para volver a pedirla mientras existan
intentos, y además se reduce un intento cada vez que esto sucede"""
elif num>int(numAdivina):
print("El número es mayor")
i-=1
print("Quedan",i,"intentos")
numAdivina=""
else:
print("El número es menor ")
i-=1
print("Quedan", i, "intentos")
numAdivina=""