首页 > 解决方案 > 将整数从一个 def 编辑到另一个

问题描述

您好,如果已经回答了类似的问题,我们深表歉意,但我找不到类似的帖子。我对 python 3 还是比较陌生,英语有点粗糙。

我启动程序,它进入 character_start() 请求名称并将运行状况变量设置为 10。然后它调用 main() 再次显示运行状况并询问用户他们想去哪里。至于现在唯一的选项是 1 ,这将带您进入 trap() 函数。用户将受到 1 个生命值的打击,它应该返回到 main() ,它将显示他们缺少 1 个生命值。

我认为问题在于,即使我在 def 之外编写 user_health ,它也不会将其识别为全局变量。

谢谢,这是我的代码。

import random

def character_start():
    user_name = input("Name: ")
    user_health = 10
    main()


def main():
    print("Health: ", user_health)
    print("Type 1 to walk into a trap.")
    main_choice = int(input("Choice: "))
    if (main_choice == 1): trap()


def trap():
    user_health = user_health - 1
    print("1 point of damage.")
    main()


character_start()

标签: pythonpython-3.x

解决方案


欢迎来到 SO。这是一个学习和成长的好社区,所以希望你能充分利用它。

正如您自己指出的那样,main并且trap不了解user_health,因为 的范围user_health仅限于 的character_start。虽然出于各种原因通常不建议使用全局变量,但我不会在这里详细说明(为此,您可以参考这个线程),但下面介绍的是一种可能的实现。修改后的代码段附有注释供参考。

import random

user_health = 10 # declare global var


def character_start():
    user_name = input("Name: ")
    main()


def main():
    print("Health: ", user_health) # main has access to user_health
    print("Type 1 to walk into a trap.")
    main_choice = int(input("Choice: "))
    if (main_choice == 1):
        trap()


def trap():
    global user_health # tell trap that user_health is a global var
    user_health = user_health - 1 # alter that global var
    print("1 point of damage.")
    main()


character_start()

这里的关键点是

  • 全局变量在任何函数范围之外声明
  • 如果要修改全局变量,通过global关键字显式告诉函数某个变量名引用全局变量(如trap函数所示)

推荐阅读