1+ """
2+ EJERCICIO: #02 FUNCIONES Y ALCANCE
3+
4+ - Crea ejemplos de funciones básicas que representen las diferentes
5+ posibilidades del lenguaje:
6+ Sin parámetros ni retorno, con uno o varios parámetros, con retorno...
7+ - Comprueba si puedes crear funciones dentro de funciones.
8+ - Utiliza algún ejemplo de funciones ya creadas en el lenguaje.
9+ - Pon a prueba el concepto de variable LOCAL y GLOBAL.
10+ - Debes hacer print por consola del resultado de todos los ejemplos.
11+ (y tener en cuenta que cada lenguaje puede poseer más o menos posibilidades)
12+ DIFICULTAD EXTRA (opcional):
13+ Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número.
14+ - La función imprime todos los números del 1 al 100. Teniendo en cuenta que:
15+ - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro.
16+ - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro.
17+ - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas.
18+ - La función retorna el número de veces que se ha impreso el número en lugar de los textos.
19+
20+ Presta especial atención a la sintaxis que debes utilizar en cada uno de los casos.
21+ Cada lenguaje sigue una convenciones que debes de respetar para que el código se entienda.
22+ """
23+
24+ # 1. Crea ejemplos de funciones básicas que representen las diferentes
25+ # posibilidades del lenguaje:
26+ # Sin parámetros ni retorno, con uno o varios parámetros, con retorno...
27+
28+ """
29+ Antes de definir una funcion podemos recapitular de forma que en retos anteriores vimos funciones nativas como range() o como bin()
30+ y es eso las funciones nativas son las funciones que ya estan en python de forma determinada o preinstalada pero nosotros tambien
31+ podemos crear nuestras propias funciones con el comando def para definir la funcion esto nos pedira un nombre para la funcion y de forma
32+ opcional un parametro que ira entre parentesis terminando con los dos puntos para pasar a definir la accion que se ejecutara.
33+ """
34+
35+ # Definir una funcion basica sin parametros con "def":
36+
37+ def ejemplo ():
38+ print ("Ejemplo" )
39+
40+ # para usar la funcion se tiene que nombrar y usar el parentesis.:
41+
42+ ejemplo ()
43+
44+ # Definir una funcion basica con parametro:
45+
46+ def ejemplo1 (lenguaje ):
47+ print (f"Hola, { lenguaje } !" )
48+
49+ ejemplo1 ("Python" )
50+
51+ # Hasta ahora estas funciones no tenian retorno pero se podian ver resultados gracias a la funcion print().
52+
53+ # Definir una funcion basica con parametro y retorno.
54+
55+ def ejemplo2 (Nombre ):
56+ return f"Hola { Nombre } "
57+
58+ print (ejemplo2 ("Franz" ))
59+
60+ # A simple vista no parece relevante este cambio pero es por la necesidad de imprimir el cambio para verlo en la consola.
61+ # Las funciones nos sirven para ahorra timepo y codigo pues cunado vamas a repetir las mismas acciones con cambios puntuales
62+ # el tener una funcion para automatizar esos cambios es bastante util.
63+ # Return sirve especificamente para sacar el resultado de la funcion de dentro de la funcion no la imprime pero ahi esta.
64+
65+ # Definir una funcion basica con mas de un parametro y retorno:
66+
67+ def ejemplo3 (Lenguaje , Nombre ):
68+ return f"Hola { Nombre } , { Lenguaje } es increible!"
69+
70+ print (ejemplo3 ("Python" , "Franz" ))
71+
72+ # De esta forma podemos poner mas parametros en la funcion.
73+ # El orden en el que se definen los parametros son el mismo orden en el que se tienen que ingresar dichos parametros para su uso correcto.
74+
75+ # Asignar valores predeterminados a los parametros de una funcion:
76+
77+ def ejemplo4 (numero = ", no ingreso un numero" ):
78+ return f"Su numero es { numero } "
79+
80+ print (ejemplo4 ())
81+
82+ # De esta forma si no se ingresa parametros en la funcion se ejecutara con el valor definido si esto no se hace y se ejecuta una funcion
83+ # sin parametros aparecera un error en la consola y se dentra la ejecucion de todo codigo que le siga.
84+
85+ # Definir una funcion con mas de un retorno:
86+
87+ def ejemplo5 ():
88+ return "uno" , "dos"
89+
90+ numero1 , numero2 = ejemplo5 ()
91+
92+ print (numero1 )
93+ print (numero2 )
94+
95+ # Definiendo las variables separadas por comas se podra separar mas de un valor que retorne una funcion.
96+
97+ # Podemos tambien hacer funciones que utilicen el mismo parametro pero que se introduscan mas variables para ese parametro:
98+
99+ def ejemplo6 (* names ):
100+ for name in names :
101+ print (f"¡Hola, { name } !" )
102+ print (type (names ))
103+ ejemplo6 ("Python" , "Franz" , "Erick" , "Arzapalo" )
104+
105+ # Con el bucle for podemos separar una gran cantidad de valores que se pongan en un parametro.
106+ # Pero lo mas importante es el * puesto antes del parametro esto combierte los valores que se ingrese en un grupo de valores conocido
107+ # como tuplas esto varia en otros leguajes pero en python es una herramienta muy util.(Esto es conocido como *args refiriendose a arguments)
108+
109+ # Ahora el siguiente nivel del tipo de funcion anterior es crear un funcion con un palabra clave y un valor de la misma forma con
110+ # una cantidad de valores variables para el parametro.
111+
112+ def ejemplo7 (** names ):
113+ for keys , value in names .items ():
114+ print (f"{ keys } , ({ value } !)" )
115+ ejemplo7 (lenguaje = "Python" , name = "Franz" , numero = 14 , serie = "the office" , pelicula = "harry potter" )
116+
117+ # En el bucle usamos .items() para poder acceder a los valores de cada clave porque cuando se trabaja con diccionarios de no usar el items
118+ # solo se trabajaria con las claves pero como se trabaja con esta es bastante util el tener un valor como con las tuplas pero ahora el
119+ # tener cada valor un nombre nos facilita de gran manera trabajar de otra forma esto simplifica el trabajo.
120+
121+ # Comentarios en funciones:
122+ def comentada ():
123+ """
124+ Esta es una funcion que se usara como ejemplo para demostrar lo
125+ importante y util que puede ser comentar una funcion de esta forma.
126+ """
127+ return "Funcion comentada"
128+
129+ help (comentada )
130+ print (comentada .__doc__ )
131+
132+ # De esta forma se llama al comentario dentro de un funcio y si esta ha sido comentada con su funcion apoyara de gran manera a otra
133+ # persona que quiera leer el codigo osea es una buena practica el comentar las funciones de esta forma.
134+
135+ # Anotacion en funciones:
136+
137+ def ejemplo8 (x :int ) -> int :
138+ return x * 5
139+ print (ejemplo8 ("Franz" ))
140+
141+ # De esta forma se anota en un funcion el tipo de parametro que se quiere o se necesita para el correcto funcionamiento de la funcion
142+ # pero solo lo hacer notar como se dice no afecta ni inpone esa regla por ello ne no cumplirse y la funcio puede funcionar sin
143+ # la necesidad de se cumpla la notacion se ejecutara de forma normal.
144+
145+ # 2. Comprueba si puedes crear funciones dentro de funciones.
146+
147+ """
148+ En python se pueden crear funciones dentro de otras funciones la principal caracteristica de estas funcion son que no funcionan afuera
149+ de la funcion en la que fureron definidas son como funciones temporales.
150+ """
151+
152+ def funcion_mayor ():
153+ def funcion_menor ():
154+ print ("Esta es la funcion menor" )
155+ print ("Esta es la funcion mayor" )
156+ funcion_menor ()
157+ funcion_mayor ()
158+
159+ # funcion_menor() # No la reconoce porque fue llamada fuera de la funcion principal.
160+
161+ # 3. Utiliza algún ejemplo de funciones ya creadas en el lenguaje (built-in).
162+
163+ # https://docs.python.org/es/3.8/library/functions.html
164+ # Documentacion de funciones nativas python.
165+
166+ """
167+ Built-in o tambien conocidas como funciones nativas son funciones definidas o preinstaladas en el lenguaje en este caso python,
168+ son muchas pero muy utiles solo veremos 3:
169+ """
170+
171+ print (len ("Franz" )) # 5
172+ # len hace un conteo de objetos en este caso el numero de letras.
173+ # Nos puede ayudar por ejemplo para saber el numero de iteraciones que podriamos tener usando el bucle for.
174+ # Ojo solo funciona con grupos de obejtos como el bucle for no con integers o floats.
175+
176+ print (type (x := 3 + 4j )) # <class 'complex'
177+ # Type retorna el tipo de variable que se le ingresa en este caso complex por que es un numero complejo.
178+ # Nos puede ayudar mas cuando no sabemos de que tipo es una variable talvez que no encontras definida o que no sabemos como termina despues de una operacion.
179+
180+ print ("python" .upper ()) # PYTHON
181+ # upper() convierte todos los caracteres de una cadena de texto a mayusculas.
182+ # Solo puede trabajar con strings.
183+
184+ # 4. Pon a prueba el concepto de variable LOCAL y GLOBAL.
185+
186+ Variable_global = "Global"
187+
188+ def ejemplo9 ():
189+ Variable_local = "Local"
190+ print (f"Variable globa ({ Variable_global } ), Variable local ({ Variable_local } )" )
191+
192+ print (Variable_global )
193+ # print(Variable_local) no se puede llamar fuera de la funcion
194+
195+ ejemplo9 ()
196+
197+ # 5. Debes hacer print por consola del resultado de todos los ejemplos.
198+ # (y tener en cuenta que cada lenguaje puede poseer más o menos posibilidades) (cumplida)
199+
200+ # 6. Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número.
201+ # - La función imprime todos los números del 1 al 100. Teniendo en cuenta que:
202+ # - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro.
203+ # - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro.
204+ # - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas.
205+ # - La función retorna el número de veces que se ha impreso el número en lugar de los textos.
206+
207+ def FizzBuzz (Cadena1 , Cadena2 ):
208+ count = 0
209+ for n in range (1 , 101 ):
210+ if n % 3 == 0 and n % 5 == 0 :
211+ print (Cadena1 + Cadena2 )
212+ elif n % 3 == 0 :
213+ print (Cadena1 )
214+ elif n % 5 == 0 :
215+ print (Cadena2 )
216+ else :
217+ print (n )
218+ count += 1
219+ return (count )
220+
221+ print (FizzBuzz ("Fizz" , "Buzz" ))
222+
223+ # Fin.
0 commit comments