Apuntes de Entornos de desarrollo



Ejemplo UML Diagrama de clases

UML

Ejercicios en Python

Input, Output y Variables
Enunciado:
1. Pide al usuario que introduzca su nombre y su altura en centímetros.
2. Imprime un mensaje en el siguiente formato:
"Hola [nombre], mides [altura] cm"
3. Convierte la altura a metros (1 metro = 100 cm) y vuelve a imprimir un mensaje en el siguiente formato:
"Hola [nombre], mides [altura_en_metros] metros"

def ejercicio1():
    nombre = input("Ingrese su nombre: ")
    altura_cm = input("Ingrese su altura: ")

    print(f"Hola {nombre}, mides {altura_cm} cm")

    try:
        altura_cm_float = float(altura_cm)
        altura_m = altura_cm_float / 100
        print(f"Hola {nombre}, mides {altura_m} metros")
    except ValueError:
        print("El valor introducido no es válido")

if __name__ == "__main__":
    ejercicio1()

Calculadora
Enunciado:
1.Crea un programa que pida al usuario dos números enteros.
2.Muestra la multiplicación y la división entre ellos.
3.Si el divisor (segundo número) es 0, muestra un mensaje que indique que la división no es posible.

def ejercicio2():
    num1 = input("Introduce el primer número: ")
    num2 = input("Introduce el segundo número: ")

    try:
        num1 = int(num1)
        num2 = int(num2)

        # Multiplicación (siempre válida)
        print(f"Multiplicación: {num1} * {num2} = {num1 * num2}")

        # División (solo si num2 no es cero)
        if num2 == 0:
            print("No se puede dividir entre 0")
        else:
            print(f"División: {num1} / {num2} = {num1 / num2}")

    except ValueError:
        print("Error: Los valores introducidos no son válidos")

if __name__ == "__main__":
    ejercicio2()

Condicionales (if, elif, else)
Enunciado:
1.Pide al usuario que introduzca una nota en una escala de 0 a 10.
2.Según la nota, muestra:
- Menor que 5: "Suspendido"
- Entre 5 y 6 (inclusive 5 y menor o igual a 6): "Aprobado"
- Entre 7 y 8: "Notable"
- Mayor que 8 hasta 10: "Sobresaliente".
3.Si la nota es menor que 0 o mayor que 10, muestra un mensaje indicando que la nota está fuera de rango.

def ejercicio3():
    nota = input("Introduce una nota del 0 al 10: ")

    try:
        nota = float(nota)  # Usamos float para admitir decimales
        if nota < 0 or nota > 10:
            print("Error, nota fuera de rango")
        elif nota < 5:
            print("Suspendido")
        elif nota < 7:  # Ya sabemos que es >= 5 por el elif anterior
            print("Aprobado")
        elif nota < 9:  # Ya sabemos que es >= 7
            print("Notable")
        else:  # Solo queda >= 8 y <= 10 (por el primer if)
            print("Sobresaliente")
    except ValueError:
        print("Error, introduce un número válido")

if __name__ == "__main__":
    ejercicio3()

Bucles FOR
Enunciado:
1.Crea una lista de 5 números, por ejemplo: [5, 2, 7, 1, 9].
2.Utilizando un bucle for, recorre la lista y calcula la suma total de los elementos.
3.Imprime el resultado de la suma.

def ejercicio4():
    numeros = [5,2,7,1,9]
    suma = 0
    for num in numeros:
        suma += num
    print(f"La suma total de los numeros es de: {suma}")

if __name__ == "__main__":
    ejercicio4()

Bucles WHILE
Enunciado:
1.Utiliza un bucle while para pedir al usuario que introduzca números.
2.El programa deberá seguir pidiendo números mientras el número ingresado sea mayor o igual a cero.
3.Cuando el usuario introduzca un número negativo, el programa finaliza y muestra todos los números introducidos (puedes mostrarlos en una lista).

def ejercicio5():
    numeros_ingresados = []
    try:
        numero = int(input("Introduce un numero(para finalizar ingresa un numero negativo:"))
        while numero >= 0:
            numeros_ingresados.append(numero)
            numero = int(input("Introduce un numero(para finalizar ingresa un numero negativo:"))
    except ValueError:
        print("No se puede introducir algo que no sea un número")
    print(f"Números ingresados: {numeros_ingresados}")

if __name__ == "__main__":
    ejercicio5()

Funciones, Variables Locales y Globales
Enunciado:
1.Define una función llamada cuadrado que reciba un número y retorne el cuadrado de ese número. Utiliza una variable local en la función.
2.Declara una variable global llamada mensaje_global y escribe otra función que la modifique.
3.Muestra por pantalla el resultado de la función cuadrado y el valor de la variable global tras la modificación.

def cuadrado(num):
    resultado_local = num * num #variable local
    return resultado_local

# Variable global

mensaje_global = "Valor inicial"

def modificar_mensaje():
    global mensaje_global
    mensaje_global = "El mensaje ha sido modificado desde la funcion"

def ejercicio6():
    numero = 4
    print(f"El cuadrado de {numero} es : {cuadrado(numero)}")
    print(f"Antes de modificar: {mensaje_global}")
    modificar_mensaje()
    print(f"Despues de modificar: {mensaje_global}")

if __name__ == "__main__":
    ejercicio6()

Funciones Lambda
Enunciado:
1.Define una función lambda que reciba un número y lo multiplique por 10.
2.Aplica esa lambda a cada elemento de la lista [1, 2, 3, 4, 5] para generar una nueva lista.
3.Imprime la nueva lista resultante.

def ejercicio7():
    multiplicar_por_diez = lambda x : x*10
    numeros = [1,2,3,4,5]

    nuevos_numeros = list(map(multiplicar_por_diez, numeros))

    print(f"Lista original: {numeros}")
    print(f"Lista multiplicada por 10: {nuevos_numeros}")

if __name__ == "__main__":
    ejercicio7()

Recursividad (Factorial)
Enunciado:
1.Define una función recursiva factorial(n) que calcule y retorne el factorial del número n.
2.Recuerda que el factorial de 0 es 1 y para n > 0, se cumple que:
factorial(n) = n * factorial(n - 1).
3.Demuestra el funcionamiento de la función llamándola, por ejemplo, con n = 5.

def ejercicio8():
    def factorial(n):
        # Caso base: factorial de 0 es 1
        if n == 0:
            return 1
        # Caso recursivo: n * factorial(n-1)
        else:
            return n * factorial(n - 1)

    # Demostración del funcionamiento con n = 5
    resultado = factorial(5)
    print("El factorial de 5 es:", resultado)

if __name__ == "__main__":
    ejercicio8()

Manejo de Errores (try/except)
Enunciado:
1.Pide al usuario que introduzca un número entero.
2.Divide 10 entre ese número.
3.Utiliza bloques try/except para manejar:
- El error al convertir el dato a entero.
- El error de división por cero..
4.Asegúrate de incluir un bloque finally que imprima un mensaje final, indicando que se ha finalizado la operación.

def ejercicio9():
    try:
        entrada = input("Introduce un numero entero:")
        numero = int(entrada)
        resultado = 10 / numero
        print(f"10 dividido entre {numero} es {resultado}")
    except ZeroDivisionError:
        print("Error: No se puede dividir entre 0.")
    except ValueError:
        print("Error: Debes introducir un numero entero valido.")
    finally:
        print("Fin del bloque try/except")

if __name__ == "__main__":
    ejercicio9()

POO en Python

Reto 4
Enunciado:
Se debe crear una clase llamada soldado, la cual debe tener un constructor con 3 atributos (peso, altura y fuerza), todos ellos con valores numéricos enteros (int). El valor de fuerza se debe inicializar con el valor 100.
Posteriormente se crearan 2 métodos:

Con esta clase debemos crear un objeto soldado y simular la pérdida o ganancia de fuerza como si estuviera en un video juego y fuese herido o cogiese un objeto de energía. El ejemplo será válido con la creación del objeto, una pérdida de fuerza y una ganancia

class Soldado:
    def __init__(self, peso, altura, fuerza=100):
        self.peso = int(peso)
        self.altura = int(altura)
        self.fuerza = int(fuerza)  # Corregido para usar el parámetro

    def perdida(self, fuerza):
        self.fuerza -= int(fuerza)
        if self.fuerza <= 0:
            self.fuerza = 0
            print("El soldado ha muerto. Fin del juego.")

    def ganancia(self, fuerza):
        self.fuerza = min(100, self.fuerza + int(fuerza))

Soldado1 = Soldado(100, 180)
print("El soldado inicia la partida con: "+str(Soldado1.fuerza)+" de fuerza")
Soldado1.perdida(10)
print("El soldado ha sido herido. Fuerza actual: "+str(Soldado1.fuerza))
Soldado1.ganancia(30)
print("El soldado gana energia. Fuerza actual: "+str(Soldado1.fuerza))
Soldado1.perdida(100)

GIT y GITHUB

Comandos Git

git init:Inicializa un nuevo repositorio git local git clone < url>:Descarga un repositorio remoto a local git status:Muestra el estado de los archivos git add < archivo>:Añade cambios a ese archivo
git commit -m "":Guarda los cambios con el mensaje git push:Sube los commits al repositorio remoto git pull:Descarga los últimos cambios del repositorio remoto y los fusiona con el local git branch:Lista todas las ramas del repositorio
git branch < nombre>:Crea una nueva rama git branch -d < nombre>:Elimina la rama git checkout < rama>:Cambia a otra rama git merge < rama>:Fusiona una rama con la rama actual
git diff:Muestra las diferencias entre archivos modificados y su última versión guardada git remote -v:Muestra los repositorios remotos configurados git reset < archivo>:Quita un archivo del área de staging git rm < archivo>:Elimina un archivo del repositorio y del sistema de archivos
git fetch:Descarga cambios del repositorio remoto sin fusionarlos git remote add < repo_name> < remote_url>:Crea una conexión entre el repositorio local y el remoto git push --force origin main:Sobrescribe y empuja todo el local al remoto git log:Muestra el historial de commits
git clean:Elimina los archivos sin seguimiento del respositorio git config:Configura las opciones de git

Streamlit

Primeros pasos:

import streamlit as st
import time

#---CONFIGURACION INICIAL DE LA PAGINA---

st.set_page_config(page_title="Demo de streamlit", page_icon=":)", layout="wide")

#---ESCRITURA---

st.title("Demo completa de los componentes de streamlit")
st.header("Explorando los elementos básicos")

#---ELEMENTOS DE TEXTO---

st.subheader("Texto enriquecido")
st.text("Esto es un texto simple")
st.markdown("**Este texto esta en negrita** y este en ***cursiva***")
st.code("print('Hola mundo')", language="python")

#---WIDGETS----

st.subheader("Widgets iterativos")
if st.button("Haz click aqui:"):
    st.success("¡Boton presionado!")

opcion = st.selectbox("Selecciona una opcion", ["A", "B", "C"])
st.write(f"Seleccionaste: {opcion}")

ingredientes = st.multiselect(
    "Selecciona tus ingredientes preferidos",
    ["Avena", "Huevo", "Pollo", "Verduras"]
)
st.write(f"Seleccionaste: {ingredientes}")

#---SLIDER---

st.subheader("Slider")
valor = st.slider("Selecciona un valor", 0, 100, 25)
st.write(f"Valor seleccionado: {valor}")

#---INPUT----

st.subheader("Inputs")
nombre = st.text_input("¿Como te llamas?")
edad = st.text_input("¿Que edad tienes?")
edad2 = st.number_input("¿Cual es tu edad?", min_value=1, max_value=120, step=1)
st.write(f"Nombre: {nombre}, edad: {edad2}")

#---ELEMENTOS MULTIMEDIA----

st.subheader("Elementos multimedia")
st.image("https://via.placeholder.com/300x150.png?text=Imagen+de+ejemplo", caption="Imagen de la web")
st.audio("https://www.soundhelix.com/examples/mp3/SoundHelix-Song-1.mp3")
st.video("https://www.w3schools.com/html/mov_bbb.mp4")

#---ESTADOS---

st.subheader("Estados")
if "contador" not in st.session_state:
    st.session_state.contador = 0

incrementar = st.button("Incrementar contador")

if incrementar:
    st.session_state.contador += 1

st.write(f"Contador: {st.session_state.contador}")

#---BARRA DE PROGRESO---

st.subheader("Barra de progreso")
progreso = st.progress(0)
for porcentaje in range(0,100,10):
    time.sleep(0.5)
    progreso.progress(porcentaje)

#---DISEÑO Y CONTENEDORES---

st.subheader("Diseños y contenedores")
col1, col2 = st.columns(2)

with col1:
    st.info("Esta es la columna 1")
with col2:
    st.warning("Esta es la columna 2")
with st.expander("Haz click para expandir"):
    st.write("Aquí puedes ocultar o mostrar contenido")

col3, col4 = st.columns(2)
with col3:
    st.info("Esta es la columna 1")
with col4:
    st.warning("Esta es la columna 2")

Comandos Streamlit


st.tittle:Crea un título st.header:Un cabecero o h2 st.subheader:h3 aprox st.text:como un p
st.markdown:Escribe texto markdown st.code:Muestra el codigo st.button:Crea un botón st.succes:Mensaje de exito en verde
st.selectbox:Selector opciones st.multiselect:Selector múltiple st.slider:Barra de medida roja st.text_input:Introduce un texto
st.number_input:Introduce un número st.image:Introduce una imagen st.audio:Introduce un audio st.video:Introduce un video
st.progress:Barra de progeso azul st.columns:Crea columnas st.info:Texto informativo azul st.warning:Texto informativo amarillo
st.error:Texto informativo rojo st.expander:Barra expansora que se puede ocultar