Ejercicio bucles anidados

Tenemos una empresa de autocares y queremos saber si un conductor puede o no conducir
Si lleva más de 5 horas trabajando ese día, no puede
Si tiene menos, se tienen en cuenta dos cosas
Si lleva trabajados más de 56 horas en la semana, tampoco puede conducir
Si tiene menos de 56 horas, si lleva más de 3 días seguidos trabajando, tampoco puede conducir

Variables:

horas_hoy
horas_semana
dias_consecutivos

Resultado:

«Puede conducir» / «NO puede conducir»

Python bucles anidados

# Promoción para clientes:
# Si tienen una antigüedad de más de 5 años
# Si son de Barcelona un 5% de descuento y si no un 2%
# Si no tienen esa antigüedad, si son de Barcelona un 3% de descuento

antiguedad=3
ciudad="Barcelona"

descuento=0

if antiguedad>=5:
    print("El cliente es antiguo")
    if ciudad=="Barcelona":
        print("El cliente es de Barcelona")
        descuento=.05
    else:
        print("El cliente NO es de Barcelona")
        descuento=.02
else:
    print("El cliente NO es antiguo")
    if ciudad=="Barcelona":
        print("El cliente es de Barcelona")
        descuento=.03

print(f"El descuento es {descuento:.0%}")

Ejemplos condicionales

nota=5

if nota>9:
    print("sobresaliente")
else:
    if nota>7:
        print("notable")
    else:
        if nota>5:
            print("aprobado")
        else:
            print("suspenso")

if nota>9:
    print("sobresaliente")
elif nota>7:
    print("notable")
elif nota>=5:
    print("aprobado")
else:
    print("suspenso")


# El coste de envío para paquetes es el siguiente:
# Hasta 10 kg: 10 €
# de 10 a 20: 20 €
# de 20 a 40: 25 €
# Más de 40: 30 €
peso=30

if peso<=10:
    print("10€")
elif peso<=20:
    print("20€")
elif peso<=40:
    print("25€")
else:
    print("30€")

if peso>40:
    print("30€")
elif peso>20:
    print("25€")
elif peso>10:
    print("20€")
else:
    print("10€")

# Para calcular el IRPF de un premio de lotería tenemos la siguiente tabla:
# de 0 a 500€ (incluido) 0%
# de 500€ a 2000€ (incluido) 3%
# de 2000€ a 100000€ (incluido) 7%
# de 100000 a 1000000 (incluido) 15%
# Más de 1000000 35%
premio=6000000
# hacer en primer lugar un if..elif que nos diga el porcentaje

if premio<=500:
    print("0%")
elif premio<=2000:
    print("3%")
elif premio<=100000:
    print("7%")
elif premio<=1000000:
    print("15%")
else:
    print("35%")
# Basándonos en ese esquema hacer un programa que le pida al usuario el importe del premio y
# que le muestre el dinero neto que va a cobrar (el importe menos el IRPF)
premio=int(input("ingrese su premio:"))

if premio<=500:
    irpf=0
elif premio<=2000:
    irpf=.03
elif premio<=100000:
    irpf=.07
elif premio<=1000000:
    irpf=.15
else:
    irpf=.35

print(f"Para un premio de {premio}€ se le aplica un irpf de {irpf:.0%} y te quedan {premio-premio*irpf}€")

Repaso variables, entrada y salida

# Variable: cajita para almacenar un valor

nombre="Juan"

# Tipos: int, float, str, bool

# Entrada: input y lo almacenamos en una variable

alumno=input("Dime tu alumno: ")

# Si es un número lo tenemos que convertir

nota=int(input("Dime tu nota: "))

# Podemos realizar cálculos aritméticos

cuenta=300
comensales=4
total=cuenta/comensales

# Imprimimos con print
print(total)

# Usamos cadenas con formato (f-strings)

print(f"Para una cuenta de {comensales} comensales y un importe de {cuenta}€ sale a {total}€ cada  uno")

Soluciones print

# Cread tres variables alumno con valor Pep, nota con valor 7.345 y asignatura con valor Python
# Imprimid los valores en una línea y la nota con dos decimales
# El alumno -- tiene una nota de __ en la asignatura __

alumno="Pep"
nota=7.345
asignatura="Python"

print(f"El alumno {alumno} tiene una nota de {nota:.2f} en la asignatura {asignatura}")

# tengo esta instrucción: print("Me llamo Lucia. Soy una IA. Te voy a quitar el trabajo 👿")
# Cambiala para que cada frase se imprima en una línea diferente

print("Me llamo Lucia. \nSoy una IA. \nTe voy a quitar el trabajo 👿")

Ejemplos print


nombre="Ana"
edad=64
email="ana@ana.com"

print(nombre,edad,email)

print(nombre,edad,email,sep=",")
print(nombre,edad,email,sep="  😁😍🎶  ")

print("-"*30)

print(nombre,end=" ")
print(edad,end=" ")
print(email,end=" ")

coeficiente=0.12345

print(f"el coeficiente es {coeficiente}")

print(f"el coeficiente es {coeficiente:.1f}")

print(f"el coeficiente es {coeficiente:.3f}")

print(f"el coeficiente es {coeficiente:.0%}")

print(f"el coeficiente es {coeficiente:.2%}")

# Escape

print("Hola \"listillo\"")

print("Jotapé\nC\\Agla 6\n08001 BCN")

print("La ruta es c:\\temp")

Soluciones variables

# Ejercicios de python - Variables
#
# 🟢 Ejercicio 1: Datos personales
# Crea variables para:
# nombre
# edad
# ciudad
# Luego muestra una frase como:
# Hola, me llamo ___, tengo ___ años y vivo en ___.
#
from ejercicios_variables import celsius

nombre='Jotapé'
edad=27
ciudad="Logroño"

print(f"Hola, me llamo {nombre}, tengo {edad} y vivo en {ciudad}")
print("Hola, me llamo",nombre,", tengo",edad,"y vivo en ",ciudad)
#
# 🟢 Ejercicio 2: Suma de dos números
# Crea dos variables numéricas
# Guarda su suma en una tercera variable
# Muestra el resultado
# 👉 Extra: haz también resta y multiplicación
#
a=15
b=78
suma=a+b
resta=a-b
multiplicacion=a*b
print(suma,resta,multiplicacion)

# 🟢 Ejercicio 3: Conversión de unidades
# Convierte grados Celsius a Fahrenheit:
# Fórmula:
# F = C * 9/5 + 32
#
# Crea una variable celsius
# Calcula fahrenheit
# Muestra el resultado
#

celsius=100
fahrenheit=(celsius*9/5)+32
print(celsius,fahrenheit)

# 🟢 Ejercicio 4: Precio total con IVA
# Crea una variable con el precio de un producto
# Crea otra con el IVA (por ejemplo 21%)
# Calcula el precio final
# 👉 Fórmula:
# total = precio + (precio * iva)
#
precio=1000
iva=0.21
total=precio+(precio*iva)
print(total)

#
# 🟢 Ejercicio 5: Tiempo total en segundos
# Convierte:
# horas
# minutos
# segundos
# a un total en segundos
# 👉 Fórmula:
# total_segundos = horas * 3600 + minutos * 60 + segundos
#

horas=10
minutos=10
segundos=10

total_segundos = horas * 3600 + minutos * 60 + segundos

print(total_segundos)
#  Calculadora de precio con descuento
# Una tienda tiene un producto con un precio base. Guarda el precio en una variable y
# el porcentaje de descuento en otra. Calcula el precio final después de aplicar el descuento
# y muéstralo.

precio_base=2000
descuento=0.1
precio_final=precio_base-descuento*precio_base
print(precio_final)

# Reparto de una cuenta de restaurante
# Tres amigos van a un restaurante. La cuenta total es 74.50 €. Guarda la cuenta en una variable
# y el número de comensales en otra. Calcula cuánto paga cada uno y cuánto es la propina
# si dejan un 10% extra entre todos
#
cuenta=74.50
comensales=3
importe=cuenta/comensales
print(importe)
propina=0.1
total_propina=cuenta*propina
print(total_propina)
print(total_propina/comensales)

Ejemplos variables python


# Enteros

edad=40

sueldo=900000

saldo_banco=-250

socios=27

print(edad)

print(sueldo)

print(saldo_banco)

print(socios)

print(type(edad))

# Decimales

nota=8.5

altura=17.6

coeficiente= -2.3

print(nota)
print(altura)
print(coeficiente)
print(type(nota))

print(.1+.2)

# cadenas

nombre="Ana Pi"

calle="C/ Aglá, 14"

email='ana@ana.com'

print(nombre)
print(calle)
print(email)
print(type(nombre))

poblacion="L'hospitalet de llobregat"
poblacion='L\'hospitalet de llobregat' # el '\' (slash) es carácter de escape

# remitente=("Jota Pé"
#            "Calle del Pi 14"
#            "08001 Barcelona")
remitente="""
Jota Pé
Calle del Pi 14
08001 Barcelona"""

print(remitente)

# concatenar

cp="08001"

ciudad="Barcelona"

linea_direccion=cp+" "+ciudad
print(linea_direccion)

cadena="Python"*15
print(cadena)
print(len(cadena))

prueba="  Ana  Garcia  "
print(len(prueba))

# Booleanos

mayor_edad=True

deudas=False

print(mayor_edad)
print(deudas)
print(type(mayor_edad))

edad=15

mayor_edad= edad>=18
print(mayor_edad)



# Cread una variable sueldo_mensual con valor de 1500
# Cread una variable sueldo_anual que sea ese valor * 12
# Imprimidlas

sueldo_mensual=1500
sueldo_anual=sueldo_mensual*12

print(sueldo_mensual,sueldo_anual)

# Cread una variable telefono con 666 999 666
# cread una variable email con ana@ana.com
# Cread una variable contacto con las dos variables concatenadas e imprimidlas

telefono="666 999 666"
email="ana@ana.com"
contacto=telefono+" - "+email

print(contacto)

# Para cracks ¿Cómo podría hacer una cadena de guiones con la misma longitud que contacto?

guiones="-"*len(contacto)

print(guiones)

# Ejemplos de cadenas f
from practica_datos import sueldo_mensual

alumno="Ana Pi"

nota=6

print(f'El alumno {alumno} ha sacado un {nota}')

sueldo_mensual=2000

print(f'El sueldo mensual es {sueldo_mensual} y el anual es {sueldo_mensual*12}')

# Esto no hacer

a=20
print(a,type(a))

a="hola que tal"

print(a,type(a))

a=9.5
print(a,type(a))
a=False
print(a,type(a))

edad="22"
edad=int(edad) # Convirtiendo de cadena a entero
print(edad+1)

nota=8
print("Tu nota es "+str(nota))
print(f'Tu nota es {nota}')

Ejercicios repaso examen

# función a la que le pasamos una lista de números y nos devuelve una tupla
# con el número de pares y el número de impares
# contarParidad([1,2,3,4,5])->(2,3) (dos pares y tres impares)

def contarParidad(lista):
    pares = 0
    impares = 0
    for numero in lista:
        if numero % 2 == 0:
            pares += 1
        else:
            impares += 1
    return (pares, impares)


def contarParidad2(lista):
    pares = len([numero for numero in lista if numero % 2 == 0])
    return (pares, len(lista) - pares)


print(contarParidad([1, 2, 3, 4, 5]))
print(contarParidad2([1, 2, 3, 4, 5]))
concesionario = [{"marca": "Tesla", "tipo": "Electrico", "autonomía": 500, "precio": 40000},
                 {"marca": "Citroen", "tipo": "Gasolina", "autonomía": 2500, "precio": 10000},
                 {"marca": "Ford", "tipo": "Gasolina", "autonomía": 3500, "precio": 20000},
                 {"marca": "Ferrari", "tipo": "Gasolina", "autonomía": 5500, "precio": 120000},
                 {"marca": "Seat", "tipo": "Electrico", "autonomía": 700, "precio": 10000},
                 {"marca": "Skoda", "tipo": "Gasolina", "autonomía": 3500, "precio": 7000},
                 ]

# Cread una función que nos devuelva la suma de precios del concesionario
def sumaPrecios(concesionario):
    total=0
    for coche in concesionario:
        total+=coche["precio"]
    return total

def sumaPrecios2(concesionario):
    return sum([coche["precio"] for coche in concesionario])
print(sumaPrecios(concesionario))
print(sumaPrecios2(concesionario))
# Cread una función a la que le pasamos una cadena y una longitud y nos devuelve las cadenas
# que superan esa longitud
# masLargas("hola que tal vamos",3)->["hola","vamos"]

def masLargas(cadena, longitud):
    palabras=cadena.split(" ")
    resultado=[]
    for palabra in palabras:
        if len(palabra)>longitud:
            resultado.append(palabra)
    return resultado

def masLargas2(cadena, longitud):
    palabras=cadena.split(" ")
    return [palabra for palabra in palabras if len(palabra)>longitud]

print(masLargas("hola que tal vamos",3))
print(masLargas2("hola que tal vamos",3))


Repaso examen tipo

# corregir código

def factorial(numero):
    total = 1
    while numero > 1:
        total *= numero
        numero -= 1
    return total


print(factorial(5))  # 120 5*4*3*2*1


def palabraMaslarga(cadena):
    palabras = cadena.split(" ")
    masLarga = palabras[0]  # Aquí NO hay un error
    for palabra in palabras:
        if len(palabra) > len(masLarga):  # Aquí hay un error (al revés)
            masLarga = palabra  # Aquí hay un error
    return masLarga


def numeroMayor(lista):
    mayor = lista[0]
    for numero in lista:
        if numero > mayor:  # Aquí hay un error (al revés)
            mayor = numero  # Aquí hay un error
    return mayor


print(palabraMaslarga("En un lugar de la mancha de cuyo nombre no quiero acordarme"))
print(numeroMayor([1, 2, 3, 7, 6, 5, 2]))
print(numeroMayor([-5, -2, -17 - 3]))


# Cread una función porcentajeIva que nos devuelva:
# 0 si el producto es "primera necesidad"
# 4 si es 'libro' o 'revista'
# 10 si es 'pañales'
# 21 en otros casos
def porcentajeIva(producto):
    if producto == "primera necesidad":
        return 0
    elif producto == "libro" or producto == "revista":
        return 4
    elif producto == "pañales":
        return 10
    else:
        return 21


print(porcentajeIva("primera necesidad"))
print(porcentajeIva("libro"))
print(porcentajeIva("revista"))
print(porcentajeIva("pañales"))
print(porcentajeIva("cacahuetes"))


# define una función a la que le pasamos una cadena y nos dice la media de longitud
# de las palabras de la cadena
def mediaLongitud(cadena):
    palabras = cadena.split(" ")
    longitudTotal = 0
    for palabra in palabras:
        longitudTotal += len(palabra)
    return longitudTotal / len(palabras)


def mediaLongitud2(cadena):
    palabras = cadena.split(" ")
    longitudes = [len(palabra) for palabra in palabras]
    return sum(longitudes) / len(palabras)


print(mediaLongitud("aa bbbb ccc"))
print(mediaLongitud2("aa bbbb ccc"))


# Una función números pares a la que le pasamos una lista de números y nos devuelve los pares

def numerosPares(lista):
    resultado = []
    for numero in lista:
        if numero % 2 == 0:
            resultado.append(numero)
    return resultado


def numerosPares2(lista):
    return [numero for numero in lista if numero % 2 == 0]


print(numerosPares([1, 2, 3, 4, 5, 6, 7, 8]))
print(numerosPares2([1, 2, 3, 4, 5, 6, 7, 8]))

clase = [{
    "nombre": "Ana",
    "creditos": 15,
    "curso": "Python"
}, {
    "nombre": "Iu",
    "creditos": 5,
    "curso": "Python"
}, {
    "nombre": "Eva",
    "creditos": 25,
    "curso": "BBDD"
}, {
    "nombre": "Pep",
    "creditos": 7,
    "curso": "BBDD"
}, ]


# Crea una función a la que le pasamos una clase y nos devuelve el total de créditos
def totalCreditos(clase):
    total = 0
    for alumno in clase:
        total += alumno['creditos']
    return total


def totalCreditos2(clase):
    total = sum([alumno['creditos'] for alumno in clase])
    return total


def totalCreditosCurso(clase, curso):
    total = 0
    for alumno in clase:
        if alumno['curso'] == curso:
            total += alumno['creditos']
    return total


def totalCreditosCurso2(clase, curso):
    total = sum([alumno['creditos'] for alumno in clase if alumno['curso'] == curso])
    return total


print(totalCreditos(clase))
print(totalCreditos2(clase))
print(totalCreditosCurso(clase, "BBDD"))
print(totalCreditosCurso2(clase, "BBDD"))


# ordenar los alumnos por crédito

def ordenCredito(clase):
    ordenados = sorted(clase, key=lambda x: x['creditos'])
    return ordenados


def ordenarCredito(clase):
    ordenados = sorted([alumno['creditos'] for alumno in clase])
    return ordenados


def mayorCredito(clase):
    mayor = max(clase, key=lambda x: x['creditos'])
    return mayor


def mayorCredito2(clase):
    mayor = max([alumno['creditos'] for alumno in clase])
    return mayor


print(ordenCredito(clase))
print(ordenarCredito(clase))
print(mayorCredito(clase))
print(mayorCredito2(clase))


# Cread una función a la que le pasamos una cadena y una letra y nos devueve una
# lista con las palabras que tienen esa letra

def palabrasConLetra(cadena, letra):
    palabras = cadena.split(" ")
    resultado = []
    for palabra in palabras:
        if letra in palabra:
            resultado.append(palabra)
    return resultado


def palabrasConLetra2(cadena, letra):
    palabras = cadena.split(" ")
    return [palabra for palabra in palabras if letra in palabra]


print(palabrasConLetra("hola que tal yo mal", "a"))
print(palabrasConLetra2("hola que tal yo mal", "a"))


# Una función a la que le pasamos una cadena y nos devuelve una lista
# con la primera letra de cada palabra

def primeraLetra(cadena):
    palabras = cadena.split(" ")
    resultado = []
    for palabra in palabras:
        resultado.append(palabra[0])
    return resultado


def primeraLetra2(cadena):
    palabras = cadena.split(" ")
    return [palabra[0] for palabra in palabras]


print(primeraLetra("hola que tal yo muy bien"))
print(primeraLetra2("hola que tal yo muy bien"))

# Cread una función a la que le pasamos una cadena y nos devuelve una lista de palabras
# que empiecen y acaben con la misma letra
def inicioFin(cadena):
    palabras = cadena.split(" ")
    resultado=[]
    for palabra in palabras:
        if palabra[0]==palabra[-1]:
            resultado.append(palabra)
    return resultado

def inicioFin2(cadena):
    palabras = cadena.split(" ")
    return [palabra for palabra in palabras if palabra[0]==palabra[-1]]

print(inicioFin("hola ana como sales tan pronto"))
print(inicioFin2("hola ana como sales tan pronto"))