# Ejemplo funciones y listas.

## Enunciado

> Aparecerá un menú con las opciones 1. (S)umas parciales 2. (N)Números 3. (S)alir. El programa debe repetirse mientras el usuario no seleccione la opción 3. E En caso de escoger una opción no válida se muestra un mensaje de error.

Opción 1, introducir números enteros positivos y mayores que cero en una lista, para formar una segunda lista con las sumas parciales de los números de la primera lista (el primero, el primero más el segundo, el primero más el segundo más el tercero, etc.). Para ello, previamente le preguntará al usuario cuantos números va a introducir. A continuación, se mostrará los siguientes resultados (se utilizará listas):

1. Los números de la primera lista.
2. Los números de la lista creada.

Opción 2, introducir números enteros positivos y mayores que cero, hasta que el usuario teclee un cero. A continuación, visualizará los siguientes resultados:

1. Visualizar los números introducidos, sin visualizar el cero.
2. Cantidad de números introducidos (sin contabilizar el cero).
3. Visualizar los números primos introducidos.
4. Visualizar la suma de los números primos y cuantos fueron.

Opción 3 Salir. Debe aparecer tu nombre y el grupo al que perteneces.

## Análisis:

* Se creará un menú, y solamente podrá salir con la opción.
* Para cada opción del menú se creará una función.
* Como todas las opciones, piden números enteros, se creará una única función.

## Diagrama

![](https://156834076-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3CsDMenpAVuNy6kou5%2F-M4fS3jJb-FWnLMb8_dw%2F-M4fSBAA5dICbuLlS7O7%2Fdiagrama%20inicial.jpg?alt=media\&token=5419218e-9a3f-4a37-9652-642241a17fe3)

### Para crear un menú. Explicación

Se creara una lista que permita validar las opciones correctas. `lista_opciones=["P","N","S"]`

Los valores introducidos se pasarán a mayúsculas. menu\_opcion=input(Mensaje).`upper()`

Código para validar que sea una opción correcta.

`if` menu\_opcion `in` lista\_opciones:

Repetir hasta que introduzco una opción válida `while`

#### Código función

```
def pedir_menu():
    bandera=True
    lista_opciones=["P","N","S"]
    while bandera:
        Mensaje="Opción 1. (P)Sumas parciales\nOpción 2. (N)Números\nOpción 3. (S)alir \nDame la opción a realizar: "
        menu_opcion=input(Mensaje).upper()
        if menu_opcion in lista_opciones:
            bandera=False
        else:
            print("Tecleaste mal la opción")
```

### Para pedir un número.

Código para validar que sea un número entero y mayor que cero se utiliza `while` hasta que se cumpla y evitar que un error con `` `try/except ``.

#### Código función

```python
def validar_numero(mensaje):
        cierto=True
        #La cantidad de números a introducir
        while cierto:
            try:
                cantidad=int(input(mensaje))
                if cantidad >=0:
                    cierto=False

                else:
                    print("Dato no válido")
            except:
               print("Tecleaste un valor diferente a un número")
        return cantidad
```

### Código para sumas parciales

Con `append()` permite introducir los números a la lista.

Y `len`(lista), la cantidad de datos de una lista.

```python
def sumas_parciales():
        numero=[]
        Lista_numero=[]
        #La cantidad de números a introducir
        cantidad=0
        while cantidad ==0:
            cantidad=validar_numero("Dime cuantos números vas a introducir: ")
            if cantidad ==0:
                print("Tecleaste un 0, debes teclear un número superior a 0")
        suma=0
        for i in range(cantidad):
            #Verificar número sea postivo y no sea letra
             numero_introducir=validar_numero("Dime el número a introducir ")
             if numero_introducir > 0:
                        numero.append(numero_introducir)
                        suma+=numero_introducir
                        Lista_numero+=[suma]

        #Visualizar datos
        print("Los núemros introducidos son: {}".format(numero))
        print("La suma de números es:  {}".format(Lista_numero))
```

### Código números primos

Para introducir los datos en la lista se utiliza `append()`.

Para el cálculo del número primo se calcula, si desde el número 2 hasta el número -1 ()`for` i `in range`(2,numero\_introducir):), el resto es diferente de cero (i`f` numero\_introducir`%`i==0), se introduce en la lista de los primos `append`.

Con `sum`(lista), permite obtener la sula de los números primos.

Y `len`(lista), la cantidad de datos de una lista.

```python
def numeros_primos():
        numero=[]
        lista_primos=[]
        cierto=True
        while cierto:
            numero_introducir=validar_numero("Número a introducir: ")
            if numero_introducir >= 0:
                    if numero_introducir==0:
                          cierto=False
                          print("Terminaste")
                    else:
                         numero.append(numero_introducir)
                         primo=0
                         for i in range(2,numero_introducir):

                                if numero_introducir%i==0:
                                    primo+=1


                         if primo == 0 or numero_introducir==1:
                                lista_primos.append(numero_introducir)
        #~Cálculo de cantidad de personas menores que 18, mayores que 60

        print("Los Números introducios son: {}. Fueron {} números".format(numero, len(numero)))
        print("Los Números primos fueron: {}. Su suma fue: {}. Fueron {} números".format(lista_primos, sum(lista_primos),len(lista_primos)))
```

### Código Completo

```python
#Crear el menú
def pedir_menu():
    bandera=True
    lista_opciones=["P","N","S"]
    while bandera:
        Mensaje="Opción 1. (P)Sumas parciales\nOpción 2. (N)Números\nOpción 3. (S)alir \nDame la opción a realizar: "
        menu_opcion=input(Mensaje).upper()
        if menu_opcion in lista_opciones:
            bandera=False

        else:
            print("Tecleaste mal la opción")

    return menu_opcion

def validar_numero(mensaje):
        cierto=True
        #La cantidad de números a introducir
        while cierto:
            try:
                cantidad=int(input(mensaje))
                if cantidad >=0:
                    cierto=False

                else:
                    print("Dato no válido")
            except:
               print("Tecleaste un valor diferente a un número")
        return cantidad
def sumas_parciales():
        numero=[]
        Lista_numero=[]
        #La cantidad de números a introducir
        cantidad=0
        while cantidad ==0:
            cantidad=validar_numero("Dime cuantos números vas a introducir: ")
            if cantidad ==0:
                print("Tecleaste un 0, debes teclear un número superior a 0")
        suma=0
        for i in range(cantidad):
            #Verificar número sea postivo y no sea letra
             numero_introducir=validar_numero("Dime el número a introducir ")
             if numero_introducir > 0:
                        numero.append(numero_introducir)
                        suma+=numero_introducir
                        Lista_numero+=[suma]

        #Visualizar datos
        print("Los núemros introducidos son: {}".format(numero))
        print("La suma de números es:  {}".format(Lista_numero))


def numeros_primos():
        numero=[]
        lista_primos=[]
        cierto=True
        while cierto:
            numero_introducir=validar_numero("Número a introducir: ")
            if numero_introducir >= 0:
                    if numero_introducir==0:
                          cierto=False
                          print("Terminaste")
                    else:
                         numero.append(numero_introducir)
                         primo=0
                         for i in range(2,numero_introducir):

                                if numero_introducir%i==0:
                                    primo+=1


                         if primo == 0 or numero_introducir==1:
                                lista_primos.append(numero_introducir)
        #~Cálculo de cantidad de personas menores que 18, mayores que 60

        print("Los Números introducios son: {}. Fueron {} números".format(numero, len(numero)))
        print("Los Números primos fueron: {}. Su suma fue: {}. Fueron {} números".format(lista_primos, sum(lista_primos),len(lista_primos)))


print("inicio")
bandera=True
while bandera:
    #Pedir las ocpiones al usuario

    menu=pedir_menu()

    if menu=="P":
        #Introducir y validar datos
        print("Opcion 1. Sumas parciales")
        sumas_parciales()

    elif menu=="N":
            #Introducir y validar datos
        print("Opcion 2. Números Primos ")
        numeros_primos()
    elif menu=="S":
            print("Opcion 3.")
            print("Mi nombre es Juan Penas Grupo Grupo X")
            bandera=False
```

### Probarlo

{% embed url="https://colab.research.google.com/drive/1wKneknEzdMxkz7waEZLJsuUgFSIp11cL" %}

## Video

{% embed url="https://edpuzzle.com/media/5e9233461c7d0a3f06925994" %}

