es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

condición if else en Python

Cuando ejecuto el siguiente código:

from datetime import datetime

if ((dfyz['yearx'] < datetime.now().year) or ((dfyz['yearx'] == datetime.now().year) and (dfyz['mon'] < datetime.now().month))):
     dfyz['predn'] = dfyz['yhat']*dfyz['pct']
elif (((dfyz['yearx'] == datetime.now().year) and (dfyz['mon'] >= datetime.now().month)) or ((dfyz['yearx'] > datetime.now().year))):
       dfyz['predn'] = dfyz['yhat']*dfyz['pct_ft']

Obtengo el siguiente error:

ValueError: The truth value of a {type(self).__name__} is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Por favor ayúdame a solucionarlo, he intentado reemplazar “and” por “&” y “or” por “|” pero sigo obteniendo el mismo error.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error que estás enfrentando probablemente se debe a que la condición en la declaración if no está devolviendo un valor booleano. En otras palabras, la expresión dentro de los paréntesis no se evalúa como Verdadero o Falso.

    Para solucionar este error, puedes intentar usar los paréntesis de manera más explícita para definir el orden de las operaciones y comparar explícitamente los valores de año y mes con los del objeto datetime actual. Aquí tienes un ejemplo de cómo podrías escribir la declaración if para evitar el error:

    si (dfyz['year_x'] < datetime.now().year) or (dfyz['year_x'] == datetime.now().year and dfyz['mon'] < datetime.now().month):
        dfyz['pred_n'] = dfyz['yhat'] * dfyz['pct']
    sino (dfyz['year_x'] == datetime.now().year and dfyz['mon'] >= datetime.now().month) or (dfyz['year_x'] > datetime.now().year):
        dfyz['pred_n'] = dfyz['yhat'] * dfyz['pct_ft']
    

    En esta versión actualizada, las comparaciones se realizan explícitamente utilizando los operadores de comparación <, >, y >=. Esto debería ayudar a resolver la ambigüedad del valor de verdad y permitir que la declaración if se evalúe correctamente como Verdadero o Falso.

Comments are closed.