Функция расчета уровня и опыта

Всем привет, я новичок в пайтоне и у нас проект сделать текстовую рпг, и мне надо сделать систему расчета повышения уровня. Но проблема в том, что я не могу сделать так, чтобы проверка if Level >= 2 работала только "один раз" так как в моем коде 1 лвл - 1000 опыта, но с этой проверкой даже если у человека 2 лвл, то у него срабатывает система "выбирания навыка" и у него повышается лвл, я пытался сделать так чтобы он повышался, когда опыт делился на 1000 без остатка, но так естественно уровень не зачислялся, так как могло случится, что этот момент не проскакивал(чтобы опыт делился на 1000 и выдавал новый уровень). Эта проверка работает тогда когда игрок покупает зелье опыта и убивает монстра. Знаю плохо объяснил, но прошу помочь!

Сама проверка

def LevelUp():
    if Pl.Xp >= 1000:
    Pl.Level += 1
    elif Pl.Xp >= 2000:
        Pl.Level +=1 
    elif Pl.Xp >= 3000:
        Pl.Level += 1
    elif Pl.Xp >= 4000:
        Pl.Level += 1
    elif Pl.Xp >= 5000:
        Pl.Level += 1
    elif Pl.Xp >= 6000:
        Pl.Level += 1
    elif Pl.Xp >= 7000:
        Pl.Level += 1
    elif Pl.Xp >= 8000:
        Pl.Level += 1 
    elif Pl.Xp >= 9000:
        Pl.Level += 1
        if Pl.Xp 
        print("Поздравляем, вы достигли", Pl.Level, "Уровня!")
        print("1) Повышение урона")
        print("2) Больше монет с монстров")
        print("3) Повышение урона от огня")
        print("4) Повышение урона от теневой магии")
        choice = input("Выберите улучшение: ")
        if choice == "1":
            Pl.Damage += 2
            print("Урон увеличен на 2 единицы", "теперь у вас", Pl.Damage, "урона!")
            sleep(0.2)
            return True
        elif choice == "2":
            Pl.PlusMonsterCoinDrop += 1
            print("Дроп увеличен!")
            sleep(0.2)
            return True
        elif choice == "3":
                DevilSwords.FireDamage += 2
                print("Урон от огня увеличен!")
                sleep(0.2)
                return True
        elif choice == "4":
                DevilSwords.CorruptionDamage += 2
                print("Урон от теневой магии увеличен!")
                sleep(0.2)
                return True
        else:
                print("Вы выбрали что-то не то!")
                print()
                return False
                               *Триггер на проверку*
            xp = Pl.Xp
            xp = rd.randint(999, 1000)
            loot = rd.randint(1, 50) * Shrek.Level
            Pl.Coins += loot
            Pl.Xp += xp
            print("Тебе удалось одолеть монстра, за что ты получил", loot, "монет," , "и", xp, "опыта")
            print()
            LevelUp()
            sleep(0.2)
            PrintCoins()
            PritXp()
            Pl.MonsterKilled += 1

Ответы (1 шт):

Автор решения: quod6

Насколько я понял, твоя проблема в том, что лвл повышается бесконечно как только повышаешь его хотя бы на 1

Если я правильно понял, то попробуй вместо множества ifов сделать 1, например

def LevelUp():
    if Pl.Xp >= 1000 * Pl.Level:
        Pl.Level += 1
→ Ссылка