gerdm / python_uma

Repositorio de código para clases de Python impartidas en la Universidad Marista
0 stars 16 forks source link

Dudas formato f-strings, variable scope #3

Closed MarianaRan closed 5 years ago

MarianaRan commented 5 years ago

¿Me podrías ayudar con las siguientes dudas, por favor?

1) Del Ejercicio 1. ¿Cuál era la respuesta de estos incisos? Para saber si lo hice bien. Considerando el diccionario people_book,

2) ¿Cómo se le agrega el 0 a la izquierda a los números para que la tabla de multiplicar quedara con ese formato?

01| 02 03 04 05 06 07 08 09 10 
-----------------------------

3) Sobre las funciones, en este ejercicio, ¿por qué arrojó 4? ¿Y al tener dos "b", la que cuenta es la que está después del print, cierto? Porque la otra sólo existe dentro de la función?

def f(a): # 'a' es conocido como un parámetro
    b = 3 # 'b' no existe fuera de este scope
    a = a + 1
    print(a)

b = 6
a = 3
f(a) # 'a' es un argumento
print(a)

4
3

Mil gracias

gerdm commented 5 years ago

Hola @MarianaRan,

2) Podemos agregar dos 0's a un número de dos maneras. Con un f-string: {x:02}; con la función format, format(x, "02"). En general, para agregar un colchón de n ceros sería "0n".

Para el f-string, el valor luego de los dos puntos indica la manera de darle un formato al número x. Puedes leer más sobre como darle formato a un string aquí

3) El valor de a nunca cambia (siempre es 3), sin embargo, cuando llamamos f(a), la a declarada dentro de la función solo vive dentro de si misma, i.e., el valor original de a nunca se ve modificado. a dentro de la función es incrementada una unidad y por eso print(a) regresa 4.

Para las b, la que cuenta depende de dónde estemos trabajando. Si multiplicamos a por b dentro de f, el resultado sería 9 (b dentro de f tiene mayor importancia) ; sí multiplicamos a por b fuera de nuestra función el resultado el resultado sería 18 (b=3, definida dentro de f no existe fuera de f).

In [1]: def f(a):
   ...:     b = 3
   ...:     return a * b

In [2]: b = 6

In [3]: a = 3

In [4]: f(a)
Out[4]: 9

In [5]: a * b
Out[5]: 18

En cualquier caso, lo mejor es no tener el mismo nombre de variables en ocasiones donde podría haber conflicto.