Python 如何在函数中编辑变量,而不是将其传递给另一个函数?

Python 如何在函数中编辑变量,而不是将其传递给另一个函数?,python,Python,我是python新手,我决定做一个简单的问答游戏。 这个想法是: 你的基本生命值是100,每个回答错误的问题是-25生命。 如果hp等于0,您将失败 问题就在这里。我不知道如何将变量从函数传递到第二个函数在这种情况下,测验中的每个问题都是不同的函数 问题是,在每个函数中,hp都会重置为其基本数字100。 对不起,如果我描述得不好,但我的英语不是很流利 已经尝试创建包含、、hp=100的函数,使其成为全局函数等。还尝试了使用、、return的各种功能 马力=100 def测试1: 测试=输入是否

我是python新手,我决定做一个简单的问答游戏。 这个想法是: 你的基本生命值是100,每个回答错误的问题是-25生命。 如果hp等于0,您将失败

问题就在这里。我不知道如何将变量从函数传递到第二个函数在这种情况下,测验中的每个问题都是不同的函数

问题是,在每个函数中,hp都会重置为其基本数字100。 对不起,如果我描述得不好,但我的英语不是很流利

已经尝试创建包含、、hp=100的函数,使其成为全局函数等。还尝试了使用、、return的各种功能

马力=100 def测试1: 测试=输入是否 如果测试==是: 这是hp测试 printhp-25应为100-25=75 测试2 如果测试==否: 印度教 输入终端 def测试2: test2=输入是否 如果test2==是: 打印这是第二次hp测试 printhp-25应为75-25=50 如果test2==否: 印度教 另一个死胡同 输入开始 测试1 在每个函数内使用全局声明

马力=100 def测试1: 全球hp在您的每项职能中都可以做到这一点 测试=输入是否 如果测试==是: 这是hp测试 hp-=25,相当于hp=hp-25 打印HP此处只打印更新的变量 测试2
请记住,使用全局变量被认为不是一个好的实践,因为它可能会使您的代码很难调试。你可以阅读更多关于它的内容。

我不确定你在这里想要达到什么目的。 但是我建议使用一个类,它可以让你更好地控制你的变量

class Game:
  def __init__(self):
      self.hp = 100

  def takeInput(self):
      self.current = input()
      self.computeScore()

  def computeScore(self):
      if self.input ==="Something":
         self.hp -= 25
      if self.checkValidScore():
            self.takeInput()
      else:
         print "game over"

  def checkValidScore(self):
      return self.hp < 0

不确定你想要实现什么。如果它保持那么简单,你也可以朝以下方向走

def test1(hp):
    test = input("yes no")
    stop_msg = None
    if test == "yes":
        print("not ok")
        hp -= 25
    elif test == "no":
        print("ok")
        stop_msg = "dead end"
    else:
        raise Exception("Expected input to be 'yes' or 'no'.")
    return hp, stop_msg


def test2(hp):
    test = input("yes no")
    stop_msg = None
    if test == "yes":
        print("'yes' sucks")
        hp -= 25
    elif test == "no":
        print("ok")
        stop_msg = "another dead end"
    else:
        raise Exception("Expected input to be 'yes' or 'no'.")
    return hp, stop_msg


def run_game(hp=100):
    print("start...")
    tests = [test1, test2]
    for test in tests:
        hp, stop_msg = test(hp)
        print("hp: {}".format(hp))
        if stop_msg:
            print(stop_msg)
            return


if __name__ == "__main__":
    run_game()
备注:

如果想要实现更复杂的决策树,可以使用任何简单的树表示。 如果testX函数中的结构始终相同,请引入一个函数,其中包含问题、答案等的参数。 语句printhp-25只打印hp减25的值。它实际上并不修改hp的值。您可能想要:

hp=hp-25 打印HP
尽管这不是一个好的做法,但您可以在每个函数中使用全局hp,并修改其值。如果您在浏览器中搜索Python函数传递值,您将找到比我们在此处所能管理的更好的解释这一点的参考。在我看来,您希望printhp-25更改存储在hp中的值。为此,您必须为hp分配一个新值,类似于hp=hp-25请注意,此答案使用-=设置变量的值。在这个问题上,您只是打印hp-25的值,您并没有实际更改hp的值,而是使用global cause printhp-25更改hp的值?我认为这就是提问者所面临的问题。@SteveArcher,不,不会的,因为你只是在打印变量,如果你想把这个值减少25,或者缩短到基本相同的hp-=25,你需要在某个地方加上hp=hp-25。是的,没错,因此,我认为,建议使用“全局”忽略了提问者问题的关键。他们对hp的范围没有问题,他们不了解如何分配变量values@SteveArcher,我已更新我的答案。现在它更恰当地解决了这个问题。