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


Soluciones ejercicios

import datetime
import random


# Cread una función tiradaDado que nos devuelva un número aleatorio del 1 al 6

def tiradaDado(limite=6):
    return random.randint(1, limite)


for i in range(10):
    print(tiradaDado())


# Cread una función que nos devuelva al azar una provincia de Barcelona
def provinciaAzar():
    provincias = ["Barcelona", "Tarragona", "Lleida", "Girona"]
    return random.choice(provincias)


for i in range(10):
    print(provinciaAzar())


# Cread una función que nos devuelva el año actual
def anyoActual():
    return datetime.date.today().year


print(anyoActual())


# Cread una función que nos devuelva True si hoy es viernes y false en caso contrario
def esViernes():
    return datetime.date.today().weekday() == 4  # 0 lunes hasta 6 domingo


print(esViernes())


# Cread una función que nos devuelva la fecha actual en formato día/mes/año

def fechaActual():
    return datetime.date.today().strftime("%d/%m/%Y")


print(fechaActual())


# Cread una función que nos devuelva el siguiente día laborable a partir de hoy
def siguienteLaborable():
    fecha = datetime.date.today()
    fecha += datetime.timedelta(days=1)
    while fecha.weekday() > 4:
        fecha += datetime.timedelta(days=1)
    return fecha


def siguienteLaborable2():
    fecha = datetime.date.today()
    fecha += datetime.timedelta(days=1)
    if fecha.weekday() > 4:
        fecha += datetime.timedelta(days=(7 - fecha.weekday()))
    return fecha


print(siguienteLaborable2())