Subprograma Python
Subprograma Python
Una función viene definida por su nombre, sus parámetros y su valor de retorno.
Esta parametrización de las funciones las convierte en una poderosa herramienta
ajustable a las circunstancias que tengamos. Al invocarla se está solicitando su
ejecución para obtener unos resultados.
Formato
Ejemplo
>>>def say_hello():
... print(‘Hello!’)
Retornar un valor
Las funciones pueden retornar (o «devolver») un valor.
Ejemplo:
>>> def uno():
... return 1
...
>>> uno()
1
>>> if uno() == 1:
... print(‘Siempre 1’)
... else:
... print(‘No se va a presentar’)
...
Siempre 1
Parámetros y argumentos.
1.
1. void CambiarCantidad(int *cantidad)
2. {
3. *cantidad = 5;
4. }
5.
6. int cantidad = 1;
7. CambiarCantidad(&cantidad);
8. printf("%d", cantidad); /* Imprime 5 */
a, b, c = 1, 2, 3
f(a, b, c)
print(a, b, c) # Imprime 1, 2, 3.
No se modifican porque los números enteros son inmutables, de igual forma los de
coma flotante, las cadenas y otros objetos.
a=1
a=2
Las asignaciones
a=1
a=2
No está cambiando el valor de a de 1 a 2 sino quitando la referencia a 1 y
poniéndosela a 2. En términos más simples, no «cambias» el valor de un objeto
sino que le asigna una nueva referencia.
Las siguientes acciones demuestran con la función id() (id muestra la dirección de
un identificador) que la variable a no almacena valores, son referencias a un valor
>>>a=1
2952065149232
>>> a=2
2952065149264
Lo mismo ocurre con las string o cadenas que también son inmutables
>>>h='hola'
>>> id(h)
2952068065520
>>> h='pedro'
>>> id(h)
2952068065584
>>>
Con los objetos mutables como listas y diccionarios, no ocurre lo mismo.
Ejemplo.
def f(a):
a[0] = "CPython"
a[1] = "PyPy"
a.append("Stackless")
Como ítems es una lista y es mutable, si es posible editarlo dentro de una función
y va a tener efecto por fuera de esta.
Python permite en una función devolver o retornar varios objetos utilizando tuplas
o listas. Por ejemplo:
a=1
b=2
c=3
def f(a,b,c):
return 4, 5, 6
a, b, c = f(a,b,c)
# Ahora "a" referencia a 4, "b" referencia a 5 y "c" referencia a 6.
def leerVector(l1):
cd=int(input('Cantidad de datos -> '))
for i in range(cd):
l1.append(int(input(f'dato {i} = ')))
def leerMatriz(m1):
nf=int(input('Cantidad de filas -> '))
nc=int(input('Cantidad de columnas -> '))
for i in range(nf):
l1=[]
for j in range(nc):
l1.append(int(input(f'dato ({i},{j}) = ')))
m1.append(l1)
Las dos funciones anteriores utilizan los parámetros para recibir el resultado de las
funciones.
#Funcion que no recibe parámetros, crea una lista con valores y retorna la #lista
def leerVectorR():
l1=[]
cd=int(input('Cantidad de datos -> '))
for i in range(cd):
l1.append(int(input(f'dato {i} = ')))
return l1
#Funcion que no recibe parámetros, crea una lista para ser trabajado como
#matriz llena valores y retorna la lista
def leerMatrizR():
m1=[]
nf=int(input('Cantidad de filas -> '))
nc=int(input('Cantidad de columnas -> '))
for i in range(nf):
l1=[]
for j in range(nc):
l1.append(int(input(f'dato ({i},{j}) = ')))
m1.append(l1)
return m1
l1=[]
leerVector(l1)
print('Lista leida \n',l1)
m1=[]
leerMatriz(m1)
print('Matriz leida \n',m1)
l1=leerVectorR()
print('Vector leido con retorno \n',l1)
m2=leerMatrizR()
print('Matriz con retorno leida \n',m2)
Ejercicio.
Se tiene una matriz con datos numéricos, hallar le promedio de los números
primos de la matriz.
Pasos genéricos
leerMatriz
Hallar suma y cuenta de primos
Hallar el promedio
Mostrar promedio
def leerMatriz():
m=[]
nf=int(input('Cantidad de filas -> '))
nc=int(input('Cantidad de columnas -> '))
for i in range(nf):
l1=[]
for j in range(nc):
l1.append(int(input(f'dato ({i},{j}) = ')))
m.append(l1)
return m
def primo(valor):
c=1
cd=0
while c<=valor :
if valor%c==0:
cd+=1
c+=1
if cd==2:
return 1
else:
return 0
def sumaCuentaPrimosMatriz(m):
sump,conp=0,0
for i in range(len(m)):
for j in range(len(m[i])):
if primo(m[i][j])==1:
sump +=m[i][j]
conp +=1
return sump,conp
#programa principal
m=leerMatriz()
sum,con=sumaCuentaPrimosMatriz(m)
if con>0:
print ('promedio =',sum/con)
else:
print('no hay primos en la matriz')
Ejercicio.
Se tiene una matriz con datos numéricos, formar dos listas con primos y Fibonacci
respectivamente.
Pasos genéricos
Leer matriz
Obtener listas de primos y Fibonacci
Mostrar lista primos
Mostrar lista fibonacci
def leerMatriz():
m=[]
nf=int(input('Cantidad de filas -> '))
nc=int(input('Cantidad de columnas -> '))
for i in range(nf):
l1=[]
for j in range(nc):
l1.append(int(input(f'dato ({i},{j}) = ')))
m.append(l1)
return m
def primo(valor):
c=1
cd=0
while c<=valor :
if valor%c==0:
cd+=1
c+=1
if cd==2:
return 1
else:
return 0
def fibonacci(valor):
a=0
b=1
t=0
while t<valor :
t=a+b
a=b
b=t
if t==valor:
return True
else:
return False
def ListaPrimosFibonacci(m):
lp=[]
lf=[]
sump,conp=0,0
for i in range(len(m)):
for j in range(len(m[i])):
if primo(m[i][j])==1:
lp.append(m[i][j])
if fibonacci(m[i][j])==True:
lf.append(m[i][j])
return lp,lf
#programa principal
m=leerMatriz()
lp,lf=ListaPrimosFibonacci(m)
print('Lista de primos \n',lp)
print('Lista de fibonacci \n ',lf)