Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problemas con if al modificar la condición #568

Closed
sofiuni opened this issue Apr 18, 2020 · 29 comments
Closed

Problemas con if al modificar la condición #568

sofiuni opened this issue Apr 18, 2020 · 29 comments
Assignees
Labels

Comments

@sofiuni
Copy link

sofiuni commented Apr 18, 2020

Tengo una clase grande que controla dos clases, una de ellas tiene una lista de objetos de clase b.
mi modelo se ve algo asi:

class ClaseGrande:
    def __init__(self, mago, criaturas, diccionario_de_criaturas):
        self.mago = mago
        self.criaturas = criaturas
        self.diccionario_de_criaturas = diccionario_de_criaturas

class Mago:
    def __init__(self, criaturas):
        self.criaturas = criaturas

class Criatura:
    def__init__(self, si_o_no):
        self.si_o_no = si_o_no

Despues tengo esta situacion:

criatura1 = Criatura(True)
criatura2 = Criatura(False)

mago = Mago([criatura1, criatura2])

dcc = ClaseGrande(mago, mago.criaturas, {1: criatura1, 2: criatura2})
if dcc.mago.criaturas[0]:
    print("entro")
    dcc.criaturas[0] = False
    dcc.mago.criaturas[0] = False
    dcc.mago.diccionario_de_criaturas[1] = False
   
if dcc.mago.criaturas[0]:
    print("entro")

El problema es que en mi codigo, esa condicion entra las dos veces. Por que pasa esto?

@Dnpoblete Dnpoblete self-assigned this Apr 20, 2020
@Dnpoblete Dnpoblete added the T01 label Apr 20, 2020
@Dnpoblete
Copy link

Hola @sofiuni, en primer lugar, como recomendación, si le estás entregando a la clase dcc el mago que contiene las criaturas y eso es lo que usas, es redundante que después le entregues dos veces más en diferentes formatos las criaturas, independientemente que después las uses o no, ya que las tienes en el mago y las modificas ahí, por lo que solo deberías entregar el mago.

Por otra parte, con respecto a tu duda, estas segura de que lo tienes implementado exactamente igual en tu código? Porque al copiar y pegar lo que enviaste, tuve que cambiar dcc.mago.diccionario_de_criaturas[1] = False por dcc.diccionario_de_criaturas[1] = False, porque me tiraba error y luego me funcionó bien y solo imprimió un "entro", por lo que no ocurre lo que tu comentas.

Quedo atenta a tu respuesta! 😄

@Dnpoblete Dnpoblete changed the title Cambio el valor en las tres listas pero aun se entra al if Problemas con if al modificar la condición Apr 20, 2020
@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

No esta asi, en mi codigo modifico bien los tres valores, luego llamo a uno de ellos el cual deberia ser False. pero entra igual en el if. Mi pregunta es por que entra al if, si no deberia ya que el valor es False.

@Dnpoblete
Copy link

Ah que te refieres con modificar bien los tres valores? Lo que pasa es como te dije el código que muestras acá funciona bien, por lo que no te puedo ayudar si me muestras algo que sigue una lógica diferente. En respuesta a tu pregunta no debería entrar y en el código de acá no entra, por lo que te recomiendo que me digas como funciona exactamente el código que mencionas que falla, para poder ayudarte (sin copiar y pegar código de tu tarea).

Quedo atenta a tu respuesta! 😄

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

Yo escribi eso tratando de explicar el mecanismo de la mejor manera posible, y no entiendo por que solo funciona aca, no se como mas explicarlo

@Dnpoblete
Copy link

Ya lo que podemos hacer, es que en primer lugar, pruebes con el código que mandaste por acá y trates de encontrar las diferencias, ya que probablemente es una diferencia pequeña entre lo que está acá y tu código lo que hace que este funcione y el otro no. Y en el caso de que busques y no encuentres, puedes subir tu código a tu repositorio e indicarme el nombre del archivo y líneas de código donde ocurre esto, para revisarlo.

Quedo atenta a tu respuesta! 😄

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

Mire pero no lo encuentro, ya esta subido, el problema empieza en la linea 172 y 174 de main.py, y cambio los valores a False en la funcion sanar_criatura() de DCC.py. Al sanar una criatura correctamente, si vuelves a intentar sanar criaturas no deberia aparecer, pero entra al if igual, y muestra la criatura como si no estubiera sana (true = no sana, false = sana)

@Dnpoblete
Copy link

Realizaste push? pregunto porque me sale que el último fue hace 11 horas, y lo otro por favor especifica en que líneas se encuentra lo que me dices del archivo DCC.py

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

106 en DCC.py

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

y si ese es el ultimo push

@Dnpoblete
Copy link

Dnpoblete commented Apr 20, 2020

Al tratar de correr el main.py para ver lo que me mencionas el programa se cae y me muestra el siguiente error:

line 71, in anadir_alimento
    print(alimento.tipo)
AttributeError: 'str' object has no attribute 'tipo'

Por lo que no puedo ver lo que me comentas, ¿podrías arreglar esto y pushear para poder probar el código?

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

A mi no me da este error, cual fue el input entregado?

@Dnpoblete
Copy link

No me dejó entregar ningún input, solo corrí el main y se cayó.

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

Que extraño, a mi no me pasa eso, igual voy a volver a hacer un push pero yo no tengo ese error

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

ya hice el push

@Dnpoblete
Copy link

Acabo de hacer pull y me sale el mismo error:
Tarta de Melaza Tarta de Melaza Tarta de Melaza Traceback (most recent call last): File ".\main.py", line 48, in <module> DCC.anadir_alimento(s[0], j) File "C:\Users\dnpob\OneDrive\Escritorio\sofiuni-iic2233-2020-1\Tareas\T01\DCC.py", line 71, in anadir_alimento print(alimento.tipo) AttributeError: 'str' object has no attribute 'tipo'

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

talvez es esa linea del os.system("clear") que no funciona con windows o algo... igual esa la borre, no tengo idea de por que pasa eso, a mi no me da ningun error. Se va a acabar el tiempo pronto, espero podamos solucionarlo

@Dnpoblete
Copy link

Pucha creo que el problema no es con esa línea de código, sino que en la línea 71 del main.py cuando haces alimento.tipo, el alimento es un str no una instancia.

@lily416
Copy link
Contributor

lily416 commented Apr 20, 2020

Hola @sofiuni

¿Podrías tratar de ser más un poco más clara con el problema que indicaste al principio de la issue? ¿En qué situación se produce? ¿Cuál es el camino que debes seguir para que se produzca el error?

Si necesitas indicar partes de tu código, puedes crear una issue en tu repositorio personal y avisar para que así la revisemos.

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

A mi no me da error pero tal vez este ultimo push (agrege una condicion por los tildes) podria arreglarlo

@lily416
Copy link
Contributor

lily416 commented Apr 20, 2020

El error que nos parece con @Dnpoblete:

line 71, in anadir_alimento
    print(alimento.tipo)
AttributeError: 'str' object has no attribute 'tipo'

se debe a que no estas usando encoding='utf-8' para leer los archivos.

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

Y ahora?

@lily416
Copy link
Contributor

lily416 commented Apr 20, 2020

Además, fíjate que tu función sanar_probabilidad() solo retorna True y en caso contrario retorna None.

Agrégale un return False, después de la condición y avísanos si es que se soluciona el error o si se sigue repitiendo.

@lily416 lily416 self-assigned this Apr 20, 2020
@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

No se arreglo al agregarle el False

@lily416
Copy link
Contributor

lily416 commented Apr 20, 2020

@sofiuni ¿podrías volver a replantear el problema que te llevo a hacer la issue?
Que entre tanta conversación se perdió la idea del problema a solucionar.

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

El problema es que no se esta cambiando el valor de estado_de_salud no se esta cambiando a False (aunque si se corre esa parte del codigo) y entra al if cuando no debe, por que no se esta cambiando a False

@lily416
Copy link
Contributor

lily416 commented Apr 20, 2020

Cuando se ejecuta correctamente, es decir, se sana la criatura, debe imprimir:

True
yes
Criatura sanada con exito.
True

¿verdad?

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

Si

@lily416
Copy link
Contributor

lily416 commented Apr 20, 2020

Por como está escrito tu código, es muy complicado revisar y solucionar tu error. 😞

Fíjate en los lugares donde se calculan las probabilidades, en esta issue #292 se habla de cuando debe cumplirse una probabilidad. Tal vez tu error, se deba a que actualmente el sanar una criatura tiene una baja probabilidad de ocurrencia.

Además debes tener cuidado con la cantidad de lugares que almacenan la información. Tener información replicada en distintas partes, dificulta la actualización de los valores y puede generar problemas como este. Si bien, puede que no alcances a aplicar los cambios en esta tarea, tenlo en cuenta para las futuras evaluaciones del curso.

Por mientras trata de encontrar el flujo y el error agregando distintos prints que te permitan ver con mayor facilidad la ejecución de tu tarea. En caso de que no logres arreglarlo, concéntrate en avanzar en otras parte de la tarea.

Saludos y éxito con lo que queda de la tarea.

@sofiuni
Copy link
Author

sofiuni commented Apr 20, 2020

Pero si se esta entrando a el if con la probabilidad por lo que ese no puede ser el problema, esta entrando al if de la funcion como muestran los prints, simplemente no se esta modificando el valor y no entiendo por que

@lily416 lily416 closed this as completed Apr 22, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants