Foros Python

Versión completa: Problema: Revisar variables de forma masiva
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos,

El problema debe ser simple pero no soy capaz de avanzar.
Tengo una serie de variables que van tomando valores a lo largo del código. Al final, esas variables van a una sentencia SQL y necesito que los variables vacías devuelvan un 0 o un nulo.

La idea es colocar todas las variables en una lista y modificar su valor con un bucle for

Código:
#declaro las variables

peso = ''
altura=''
edad=''

def validarNumero(variable): #convierte los valores vacíos en 0
    if variable=='':
        variable = float(0)
    return variable


# peso = validarNumero(peso)
print (f' el peso es {peso}') # De manera individual, la variable peso

variablesAgrupadas = [peso, altura, edad]

for variable in variablesAgrupadas:
    variable = validarNumero(variable)
    print (f'La variable es {variable}') # aquí se ve que se realiza el cambio


print (f' la altura es {altura}')# altura no recibe el nuevo valor

# al final el código va a una sentencia SQL que podría ser....

sql = f' Insert into personas (peso, altura, edad) values ({peso}, {altura}, {edad})'


Cuando ejecuto la sentencia SQL el resultado es 
Cita:INSERT INTO personas (peso, altura, edad) VALUES (,,)

y esto da error. La sentencia correcta sería

Cita:INSERT INTO personas (peso,altura, edad) VALUES (0.0,0.0,0.0)

o creo que tambien me valdría....

INSERT INTO personas (peso,altura, edad) VALUES (null, null, null)

Por algún motivo, aunque el cambio de valor se ve dentro del ciclo for, el nuevo valor no se transmite a la variable.
¿Qué puede ser?

Saludos
Hola, Rafa.

El problema es que aquí:

Código:
variablesAgrupadas = [peso, altura, edad]

for variable in variablesAgrupadas:
    variable = validarNumero(variable)
    print (f'La variable es {variable}')

Se crea una variable de nombre "variable" que recibe el resultado de la función validarNumero(), pero no modifica el elemento original de la lista. Habría que hacerlo explícito con algo como esto:

Código:
for i, variable in enumerate(variablesAgrupadas):
    variable = validarNumero(variable)
    variablesAgrupadas[i] = variable
    print (f'La variable es {variable}')

Capaz una solución más pythonica sería hacer algo así:

Código:
variablesAgrupadas = list(map(validarNumero, variablesAgrupadas))

Sobre la función map(): https://micro.recursospython.com/recurso...n-map.html.

Saludos
Hola Francisco,

Gracias por la respuesta.
La idea era (es) que la variable (por ejemplo, altura) cambie su valor de "" a 0.0.
Lo que propones es modificar el valor en la lista, sustituyendo una variable por su valor.

Código:
for i, variable in enumerate(variablesAgrupadas):
    variable = validarNumero(variable)
    variablesAgrupadas[i] = variable
print (f' la altura es de {altura} metros ')# altura no recibe en nuevo valor
print (f' la altura es de {variablesAgrupadas[1]} metros')


# El resultado es....

'''
la altura es de  metros
la altura es de 0.0 metros

'''


No es la solución buscada, pero me vale

yo había probado algo como ... for index, variable in len(variablesAgrupadas): ... pero me daba error. No hay forma de recordar "enumerate".

La función map no la conocía y parece muy interensante. La tendré en cuenta.

Doy el tema por cerrado. Buscaba una solución simple y esta lo es.

Saludos.