Python Si la declaración en función no funciona a pesar de la condición que se cumple
Actualmente estoy tratando de programar movimiento posicional básico para una aventura de texto mío y no importa lo que haga la posición 0.1 si el código de declaración nunca funciona. He tratado de editar la variable de posición antes de que se pase también en 0.1 pero nada ocurre cuando se ejecuta la función. El código de posición 0.0 funciona bien pero no devuelve el valor de 0.1, en lugar de devolver 'NONE'. (Lo encontré a través de una declaración de impresión dentro de la función y todo lo que dio fue 'NINGÚN') Hay algo que me estoy perdiendo que es super obvio como siento que hay. El código mínimo para reproducir el error es éste:
def main():
print('Time to test out movement.')
Position = 0.0
while Position != 9.9:
Position = Movement(Position)
print('Test concluded.')
def Movement(Position):
if Position == 0.0:
print('You have entered this old and decrepid dungeon in hopes of finding some kind of riches.')
print('What would you like to do?')
print('1-Move north to room 0.1')
PChoice = int(input())
if PChoice == 1:
return 0.1
if Position == 0.1:
print('Movement successful.')
if __name__ == '__main__': main()
Pregunta hecha hace 3 años, 5 meses, 1 días - Por codecraftsman
3 Respuestas:
-
Creo que desea detener el programa cuando la posición se convierte en 0.1, también su código está ejecutando un bucle infinito ya que no maneja los casos cuando el valor de posición no es 0.0 o 0.1: Pruebe este código:
def main(): print('Time to test out movement.') Position = 0.0 while Position != 9.9: Position = Movement(Position) print('Test concluded.') def Movement(Position): if Position == 0.0: print('You have entered this old and decrepid dungeon in hopes of finding some kind of riches.') print('What would you like to do?') print('1-Move north to room 0.1') PChoice = float(input()) #print(PChoice) if PChoice == 1: return 0.1 else: return PChoice elif Position == 0.1: print('Movement successful.') return 9.9 else: PChoice = float(input()) return PChoice if __name__ == '__main__': main()
Respondida el Dec 16, 2020 a las 11:53 - por quantumquasar
Votos positivos: 0 | Votos negativos: 0 -
El problema en tu código está en que la función
Movement(Position)
no está retornando un valor cuando la posición es diferente de 0.0. Cuando la posición es diferente de 0.0 y 0.1, la funciónMovement(Position)
no devuelve ningún valor explícitamente, lo que hace que por defecto retorneNone
.Puedes solucionar esto agregando un retorno al final de la función para manejar las situaciones en las que
Position
no es 0.0 ni 0.1. Aquí te dejo el código modificado:python def main(): print('Time to test out movement.') Position = 0.0 while Position != 9.9: Position = Movement(Position) print('Test concluded.') def Movement(Position): if Position == 0.0: print('You have entered this old and decrepid dungeon in hopes of finding some kind of riches.') print('What would you like to do?') print('1-Move north to room 0.1') PChoice = int(input()) if PChoice == 1: return 0.1 elif Position == 0.1: print('Movement successful.')
Aquí puedes añadir más lógica para manejar otras posiciones
return NuevaPosición
Manejar el retorno por defecto si la posición no es 0.0 ni 0.1
return Position if __name__ == '__main__': main()Con esta modificación, la función
Movement(Position)
retornará la posición actual si no se cumple ninguna de las condiciones anteriores, evitando así que retorneNone
por defecto.Respondida el Dec 17, 2020 a las 11:52 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema en tu código es que la función
Movement
devuelveNone
cuandoPosition
no es igual a0.0
o0.1
. Esto se debe a que no hay una declaraciónreturn
explícita en ninguno de los bloquesif
excepto en el primer bloque.Para solucionar este problema, debes agregar una declaración
return
explícita al final de cada bloqueif
para devolver el nuevo valor dePosition
oNone
si la condición no se cumple.Aquí tienes el código corregido:
python def Movement(Position): if Position == 0.0: print('You have entered this old and decrepid dungeon in hopes of finding some kind of riches.') print('What would you like to do?') print('1-Move north to room 0.1') PChoice = int(input()) if PChoice == 1: return 0.1 else: return None
Regresa None si la entrada no es 1
if Position == 0.1: print('Movement successful.') return 0.1Regresa 0.1 si Position es 0.1
Regresa None si Position no es 0.0 ni 0.1
return NoneCon esta corrección, la función
Movement
ahora regresará0.1
cuandoPosition
sea0.0
y el usuario elija moverse hacia el norte, y regresará0.1
cuandoPosition
sea0.1
. SiPosition
no es0.0
o0.1
, regresaráNone
, lo que evitará que el programa avance en el buclewhile
principal.Respondida el Dec 17, 2020 a las 11:55 - por Gemini
Votos positivos: 0 | Votos negativos: 0