Skip to content
Snippets Groups Projects
Commit 768d82f8 authored by Jesus David Bermudez Sanchez's avatar Jesus David Bermudez Sanchez
Browse files

se termino la segunda parte. Ambas partes quedaron funcionando, faltaría el...

se termino la segunda parte. Ambas partes quedaron funcionando, faltaría el estilo yla explicacion con Markdown
parent ed836510
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# *Mi nombre es Jesus David Bermudez Sanchez, soy estudiante de la Maestria en Fisica de la Universidad Nacional de Colombia, Sede Bogotá* # *Mi nombre es Jesus David Bermudez Sanchez, soy estudiante de la Maestria en Fisica de la Universidad Nacional de Colombia, Sede Bogotá*
--- ---
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## El problema a resolver se puede dividir en dos partes. ## El problema a resolver se puede dividir en dos partes.
## La primera parte la podemos llamar: Triángulo de Pascal ## La primera parte la podemos llamar: Triángulo de Pascal
Escriba una rutina en python que reciba como entrada un número entero, n, e imprima los números en la n-ésima fila Escriba una rutina en python que reciba como entrada un número entero, n, e imprima los números en la n-ésima fila
del triángulo de Pascal. El programa debe verificar si el número n es entero, o arrojar un mensaje informando que ha habido un error del usuario en caso contrario. del triángulo de Pascal. El programa debe verificar si el número n es entero, o arrojar un mensaje informando que ha habido un error del usuario en caso contrario.
--- ---
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
La funcion ``corazon_pascal`` es una funcion que usa recursión para retornar la fila ``n`` del triangulo de Pascal. La funcion ``corazon_pascal(n)`` es una funcion que usa recursión para retornar la fila ``n`` del triangulo de Pascal.
El resultado fundamental El "algoritmo" para llevar a cabo esta tarea se puede resumir en los siguientes pasos:
* Se crea una lista vacia llamada ``lista`` donde se guardarán los elementos del trianglo de Pascal.
* En el caso donde el entero introducido ``n`` es _cero_, se imprime un mensaje solicitando al ususario un numero entero diferente de _cero_.
* En el caso donde el entero introdcido ``n``es _uno_, se concatena la lista vacia``lista`` con la lista ``[1]`` y este resultado se guarda en la variable ``lista``.
* Cuando el entero introducido ``n`` es mayor a uno, se "llama" a la funcion ``corazon_pascal(n)`` cuando el argumento es ``n-1``, esto retorna la fila ``n-1`` del triangulo de Pascal en una lista. Sumamos los elementos consecutivos de esta lista y añadimos cada una de estas sumas a una nueva lista; esta ultima la creamos usando _list comprehension_.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
def corazon_pascal(n): def corazon_pascal(n):
""" """
Esta función recibe un argumento de tipo entero Esta función recibe un argumento de tipo entero
Retorna una lista con los numeros de la fila n del triangulo de Pascal Retorna una lista con los numeros de la fila n del triangulo de Pascal
""" """
lista=[] lista=[]
if n==1:
if n==0:
print("""
Estamos etiquetando las filas del triangulo de Pascal
desde el 1. La fila 1 es [1], la fila 2 es [1,1], etc
""")
elif n==1:
lista=lista+[1] lista=lista+[1]
#elif n==2: #elif n==2:
#lista=lista+[1,1] #lista=lista+[1,1]
else: else:
lista_antes=corazon_pascal(n-1) lista_antes=corazon_pascal(n-1)
# La condicion if i<len(lista_antes)-1 es para evitar evaluar indices mayores
# que la longitud de la lista lista_antes, ya que en lo que se apenda esta
# lista_antes[i+1].
lista=[1]+[lista_antes[i]+lista_antes[i+1] for i,_ in enumerate(lista_antes) if i<len(lista_antes)-1]+[1] lista=[1]+[lista_antes[i]+lista_antes[i+1] for i,_ in enumerate(lista_antes) if i<len(lista_antes)-1]+[1]
return lista return lista
``` ```
%% Cell type:markdown id: tags:
# Falta explicacion
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
def triangulo_pascal(n): def triangulo_pascal(n):
""" """
Esta funcion recibe un string n Esta funcion recibe un string n
En caso de que la variable n NO sea un numero entero En caso de que la variable n NO sea un numero entero
imprime un mensaje en pantalla solicitando un entero imprime un mensaje en pantalla solicitando un entero
""" """
es_entero=n.isdecimal() es_entero=n.isdecimal()
if es_entero: if es_entero:
return corazon_pascal(int(n)) return corazon_pascal(int(n))
else: else:
print("""El numero introducido NO es un numero entero, print("""El numero introducido NO es un numero entero,
por favor introduzca un numero ENTERO""") por favor introduzca un numero ENTERO""")
return "" return ""
``` ```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
numero_usuario=input(""" numero_usuario=input("""
Introduzca un numero entero mayor que cero, Introduzca un numero entero mayor que cero,
se retornará la fila n del triangulo de Pascal se retornará la fila n del triangulo de Pascal
""") """)
print("") print("")
print(triangulo_pascal(numero_usuario)) print(triangulo_pascal(numero_usuario))
``` ```
%% Output %% Output
Introduzca un numero entero mayor que cero, Introduzca un numero entero mayor que cero,
se retornará la fila n del triangulo de Pascal se retornará la fila n del triangulo de Pascal
5 3
[1, 4, 6, 4, 1] [1, 2, 1]
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# --> Falta explicacion
## Triangulo de Pascal modificado ## Triangulo de Pascal modificado
Modifique la rutina anterior para que reciba un número variable de argumentos: n1, n2, n3,... y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila n1 del triángulo de Pascal, el segundo elemento una lista con los números en la fila n2, y así sucesivamente. Modifique la rutina anterior para que reciba un número variable de argumentos: n1, n2, n3,... y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila n1 del triángulo de Pascal, el segundo elemento una lista con los números en la fila n2, y así sucesivamente.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
def f(x): varios_numeros=input("""
aux=0 Introduzca una secuencia de numeros ENTEROS separados por comas,
try: e.g. n1,n2,n3
print(int(x)) Se retornará una lista que contiene las filas n1,n2 y n3 del
except: triangulo de Pascal
print("El numero no es entero") """)
lista_de_numeros_string=varios_numeros.split(",")
# lista_de_numeros_int=[int(x) for x in lista_de_numeros_string]
# print(lista_con_numeros_int)
# Comprobamos que los numeros en la lista lista_con_numeros_int sean de tipo int
#for i in lista_con_numeros_int:
# print(type(i))
filas_del_tri_pascal=[triangulo_pascal(h) for h in lista_de_numeros_string]
print("")
print("")
print("[")
for s in filas_del_tri_pascal:
print(s)
print("]")
f(3+4j)
``` ```
%% Output %% Output
El numero no es entero
Introduzca una secuencia de numeros ENTEROS separados por comas,
e.g. n1,n2,n3
Se retornará una lista que contiene las filas n1,n2 y n3 del
triangulo de Pascal
2,4,6
[
[1, 1]
[1, 3, 3, 1]
[1, 5, 10, 10, 5, 1]
]
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
print(6//4)
``` ```
%% Output
1
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
Bibliografia utilizada: Bibliografia utilizada:
+ https://stackoverflow.com/questions/44891070/whats-the-difference-between-str-isdigit-isnumeric-and-isdecimal-in-python + https://stackoverflow.com/questions/44891070/whats-the-difference-between-str-isdigit-isnumeric-and-isdecimal-in-python
+ + https://www.w3schools.com/python/ref_string_split.asp
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment