Cómo reducir la complejidad de la función utilizando múltiples declaraciones

He escrito esta función para un juego que estoy haciendo, sin embargo siento que he overcomplicado piensa usando múltiples anidados si las declaraciones. ¿Alguien sabe una forma más concisa de hacer esto? Soy bastante nuevo para codificación tan disculpas si esto parece trivial.

La función comprueba lo siguiente:

Equipo = 0: la fila - anterior es un valor negativo

Equipo = 1: la fila - anterior es un valor positivo

def check(item, row, col):
    previousRow = 6 
    if item.team == 0:
        if ((row - previousRow) < 0):
            return False
        else:
            return True
    else:
        if item.team == 1:
            if ((row - previousRow) > 0):
                return False
            else:
                return True



Pregunta hecha hace 3 años, 5 meses, 1 días - Por codemasterx


4 Respuestas:

  • Esto es lo que Fuente reduce su código a:

    def check(item, row, col):
        previousRow = 6
        if item.team == 0:
            return row - previousRow >= 0
        elif item.team == 1:
            return row - previousRow <= 0
    

    Respondida el Dec 16, 2020 a las 21:21 - por pythonpirate

    Votos positivos: 0 | Votos negativos: 0

  • Si item.team no es 0 no 1, entonces su código cae a través y no ejecuta explícitamente return declaración, que equivale a la devolución None. Pero si estás seguro de que item.team siempre será 0 o 1, entonces la segunda prueba para 1 cuando la primera prueba para 0 ha fallado se vuelve innecesaria.

    Así pues, en el supuesto de que item.team siempre será 0 o 1, el código se puede simplificar a:

    def check(item, row, col):
        previousRow = 6 
        return row - previous >= 0 if item.team == 0 else row - previousRow <= 0
    

    Respondida el Dec 16, 2020 a las 21:26 - por binarybard

    Votos positivos: 0 | Votos negativos: 0

  • Para simplificar la función y reducir la complejidad, puedes eliminar los anidamientos innecesarios y utilizar condiciones más concisas. Aquí te muestro cómo podrías reescribir la función de una manera más clara y simple:

    python
    def check(item, row, col):
        previousRow = 6
        if item.team == 0:
            return (row - previousRow) >= 0
        elif item.team == 1:
            return (row - previousRow) <= 0
    

    En esta versión de la función, puedes ver que hemos eliminado los anidamientos innecesarios y hemos utilizado cláusulas elif para manejar los distintos casos de forma más directa. También hemos simplificado las condiciones de retorno para que sean más concisas y fáciles de entender. Espero que esta versión te resulte más clara y menos complicada.

    Respondida el Dec 17, 2020 a las 21:22 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Hay una forma más concisa de escribir esta función utilizando operadores ternarios. Los operadores ternarios son una forma abreviada de escribir declaraciones if-else. La sintaxis es:

    
    condición ? valor_si_verdadero : valor_si_falso
    

    Usando un operador ternario, podemos reescribir tu función de la siguiente manera:

    
    def check(item, row, col):
        previousRow = 6
        return True if ((row - previousRow) < 0 and item.team == 0) or ((row - previousRow) > 0 and item.team == 1) else False
    

    Esta función es más concisa y fácil de leer que la versión original.

    Respondida el Dec 17, 2020 a las 21:26 - por Gemini

    Votos positivos: 0 | Votos negativos: 0