首页 > 解决方案 > 类属性未在程序中更新

问题描述

我对 Python 编码相当陌生。在我的代码中,我试图根据 myPlayer.job 更改 myPlayer.hp 和 myPlayer.sp 的值。但是,出于某种原因,无论工作如何,当我在程序中检查它们时,HP 和 SP 值仍然为 0。如果您知道如何更改它们,请告诉我并感谢您。这是处理我的问题的代码:

class player:
  def __init__(self):
    self.name = ''
    self.job = ''
    self.hp = 0
    self.sp = 0
    self.pwr = 0
    self.res = 0
    self.agi = 0
    self.smr = 0
    self.wll = 0
    self.status_effects = []
    self.location = 'b2'
    self.game_over = False
myPlayer = player()

def main_game_loop():
  while myPlayer.game_over is False:
    prompt()


def setup_game():
  os.system('cls')

question1 = "Hello, what's your name?\n"
for character in question1:
    sys.stdout.write(character)
    sys.stdout.flush()
    time.sleep(0.05)
player_name = input("> ")
myPlayer.name = player_name

question2 = "Hello, what role do you want to play?\n"
question2added = "(You can play as a warrior, mage, or priest)\n"
for character in question2:
    sys.stdout.write(character)
    sys.stdout.flush()
    time.sleep(0.05)
for character in question2added:
    sys.stdout.write(character)
    sys.stdout.flush()
    time.sleep(0.01)
player_job = input("> ")
valid_jobs = ['warrior', 'mage', 'priest']
if player_job.lower() in valid_jobs:
    myPlayer.job = player_job
    print("You are now a " + player_job + "!\n")
while player_job.lower() not in valid_jobs:
    player_job = input("> ")
    if player_job.lower() in valid_jobs:
        myPlayer.job = player_job
        print("You are now a " + player_job + "!\n")
if myPlayer.job == 'warrior':
    myPlayer.hp = 25
    myPlayer.sp = 0
elif myPlayer.job == 'mage':
    myPlayer.hp = 15
    myPlayer.sp = 20
elif myPlayer.job == 'priest':
    myPlayer.hp = 20
    myPlayer.sp = 15

标签: python

解决方案


您的代码不一定不正确,但是当玩家进入他们的工作时很有可能出错。

您有以下代码:

if player_job.lower() in valid_jobs:

这意味着如果玩家进入Warrior你就会明白他们的意思warrior。那很好。但是,当您分配玩家的工作时,您需要执行以下操作:

myPlayer.job = player_job

这可能会导致问题,因为您没有lower()在工作。

相反,您可能想要:

myPlayer.job = player_job.lower()

这样,当您查看要分配的玩家工作时sphp它将匹配您要与之比较的小写字符串。


推荐阅读