如何将用户输入存储为Python全局变量?
嘿,很高兴看到你通过开发文字冒险游戏学Python——这真的是超棒的实践方式!
先解答你的核心疑问:你的问题出在变量作用域上——你在playerName()函数里定义的name是局部变量,函数执行完后这个变量就会被销毁,所以其他函数根本找不到它。
你想的用全局变量是一个可行的解决办法,但其实还有更适合新手、也更符合Python编程习惯的方式,我给你两种方案:
方案1:让函数返回姓名(推荐)
这种方法不需要全局变量,而是让playerName()函数把用户输入的姓名“交出来”,然后你把它存在一个全局的变量里,其他函数需要用的时候直接用这个变量,或者把它作为参数传给函数。
修改后的代码示例:
def playerName(): name = input("Before we begin, what is your name, warrior? ") print("\n") print("Welcome {}, now be on your way!".format(name)) print("\n") return name # 关键:把输入的姓名返回出去 # 调用函数,把返回的姓名存在一个变量里 player_name = playerName() # 举个其他函数用这个姓名的例子 def check_inventory(): print(f"{player_name}, your inventory is empty. Maybe go loot some chests!") # 测试一下 check_inventory()
如果你想更规范一点,还可以把姓名作为参数传给其他函数:
def check_inventory(name): print(f"{name}, your inventory is empty. Maybe go loot some chests!") # 调用时传入姓名变量 check_inventory(player_name)
方案2:使用全局变量
如果你确实想用全局变量,也很简单:先在函数外面定义一个全局的name变量,然后在playerName()函数里用global关键字声明你要修改的是这个全局变量,而不是创建一个新的局部变量。
代码示例:
# 先在全局作用域定义变量 name = "" def playerName(): global name # 声明:下面的name是全局的那个name name = input("Before we begin, what is your name, warrior? ") print("\n") print("Welcome {}, now be on your way!".format(name)) print("\n") # 调用函数,此时全局的name已经被赋值 playerName() # 其他函数里直接用全局的name def encounter_monster(): print(f"Oh no! A monster jumps out at {name}!") encounter_monster()
最后纠正一下你的小误解:print("string" + name)这个写法本身是对的,但前提是name在当前函数的作用域里能被找到。之前你出错是因为name只在playerName()里是局部变量,其他函数看不到它。
慢慢来,搞懂变量作用域是Python入门的关键一步,你现在通过做游戏来实践,进步肯定会很快的!
内容的提问来源于stack exchange,提问作者Cl4rify
相关产品推荐
相关产品推荐

