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.

Cada rango se repite una y otra vez.

Quiero que totalxp sea acumulada y sumada cada vez que se ejecuta el bucle, sin embargo, quiero que el rango 1 deje de imprimir cada vez que llego a un rango superior.

import math
totalxp = 0
rank = 1
while totalxp < 2000:
  xpearned = int(input('Ingrese la experiencia ganada en el último juego'))
  totalxp = xpearned + totalxp
  if totalxp >= 100:
    rank = 1
    print('Has sido ascendido a Cabo', rank)
    totalxp = totalxp - 100
    print(totalxp)
  if totalxp >= 300:
    rank = rank + 1
    print('Has sido ascendido a Sargento', rank)
    totalxp = totalxp - 300
  if totalxp >= 700:
    rank = rank + 2
    print('Has sido ascendido a Sargento Primero', rank)
    totalxp = totalxp - 700
  if totalxp >= 1500:
    print('Has sido ascendido a Oficial de Clase', rank)
  print(totalxp)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, necesitamos modificar el código de la siguiente manera:

    import math
    totalxp = 0
    rank = 1
    while totalxp < 2000:
        xpearned = int(input('Ingrese la experiencia obtenida en la última partida: '))
        totalxp = xpearned + totalxp
        if totalxp >= 100 and rank == 1:
            rank += 1
            print('¡Ha sido ascendido a Cabo!', rank-1)
            totalxp -= 100
        elif totalxp >= 300 and rank == 2:
            rank += 1
            print('¡Ha sido ascendido a Sargento!', rank-1)
            totalxp -= 300
        elif totalxp >= 700 and rank == 3:
            rank += 2
            print('¡Ha sido ascendido a Sargento de Estado Mayor!', rank-2)
            totalxp -= 700
        elif totalxp >= 1500 and rank == 5:
            print('¡Ha sido ascendido a Oficial Subalterno!', rank-2)
        else:
            print(totalxp)
    

    Hemos modificado las declaraciones condicionales para incluir una comprobación del rango actual, de modo que los mensajes de ascenso sólo se impriman una vez por rango. Además, cambiamos el primer if por un bloque de if-elif para evitar que los otros mensajes de ascenso se activen si el rango ya ha sido incrementado. Por último, hemos añadido una declaración else para imprimir el total de XP en casos en los que no se logra un ascenso.

Comments are closed.