Python 全局变量can';不能在单独的函数中修改

Python 全局变量can';不能在单独的函数中修改,python,Python,我正在尝试做一个简单的RPS游戏,但看不出我做错了什么。 我将pc选项、player选项和turn作为全局变量取消,但无法在函数中修改它们,例如checkWinner() 如果在调用函数后打印该值,它仍然具有初始值 代码: 随机导入 导入系统 pc_选项=['r','p','s'] pc_choise=“” 玩家选择=“” 圈数=0 打印(“\t\tWelcome to Rock Paper剪刀”) def getPcChoice(): 返回random.randint(1,3)-1 def g

我正在尝试做一个简单的RPS游戏,但看不出我做错了什么。 我将pc选项、player选项和turn作为全局变量取消,但无法在函数中修改它们,例如
checkWinner()

如果在调用函数后打印该值,它仍然具有初始值

代码:

随机导入
导入系统
pc_选项=['r','p','s']
pc_choise=“”
玩家选择=“”
圈数=0
打印(“\t\tWelcome to Rock Paper剪刀”)
def getPcChoice():
返回random.randint(1,3)-1
def getUserChoice():
player_choice=input('请选择:')
圈数=1
如果(player_choice.lower()不在pc_choices中):
打印('\n请使用R、P或S-*不区分大小写*\n')
getUserChoice()
其他:
pc_choise=pc_选项[getPcChoice()]
打印(“\n您选择的”+玩家选择+”和电脑选择的”+
个人电脑(选择)
胜利者()
def checkWinner():
如果(player_choice.lower()==pc_chouse.lower()):
打印(‘领带’)
elif(播放器选择.lower()='r'和pc选择.lower()='p'
或者玩家的选择。lower()='p'和pc选择。lower()='s'
或者播放器的选择。lower()='s'和pc_choose.lower()='r'):

print('youwin!在代码的第一行添加以下代码:

全局pc_选项
全局pc_选项


这是为了标记将使用的变量是全局变量。

在代码的第一行添加以下代码:

全局pc_选项
全局pc_选项


这是为了标记将使用的变量是全局变量。

您需要在函数范围内将变量声明为
全局
,以便Python解释器可以相应地解释它们,否则,默认情况下,它们将获得函数范围。我还发现了已修复的缩进问题。下面是您修改的代码:

随机导入
导入系统
pc_选项=['r','p','s']
pc_choise=“”
玩家选择=“”
圈数=0
打印(“\t\tWelcome to Rock Paper剪刀”)
def getPcChoice():
返回random.randint(1,3)-1
def getUserChoice():
全球个人电脑选择
全球玩家选择
player_choice=input('请选择:')
圈数=1
如果(player_choice.lower()不在pc_choices中):
打印('\n请使用R、P或S-*不区分大小写*\n')
getUserChoice()
其他:
pc_choise=pc_选项[getPcChoice()]
打印(“\n您选择的”+玩家选择+”和电脑选择的“+电脑选择”)
胜利者()
def checkWinner():
全球个人电脑选择
全球玩家选择
如果(player_choice.lower()==pc_chouse.lower()):
打印(‘领带’)
elif(播放器选择.lower()='r'和pc选择.lower()='p'
或者玩家的选择。lower()='p'和pc选择。lower()='s'
或者播放器的选择。lower()='s'和pc_choose.lower()='r'):

print('You win!您需要在函数范围内将变量声明为
global
,以便Python解释器可以相应地解释它们,否则,默认情况下,它们将获得函数范围。我还发现了我已修复的缩进问题。下面是您修改的代码:

随机导入
导入系统
pc_选项=['r','p','s']
pc_choise=“”
玩家选择=“”
圈数=0
打印(“\t\tWelcome to Rock Paper剪刀”)
def getPcChoice():
返回random.randint(1,3)-1
def getUserChoice():
全球个人电脑选择
全球玩家选择
player_choice=input('请选择:')
圈数=1
如果(player_choice.lower()不在pc_choices中):
打印('\n请使用R、P或S-*不区分大小写*\n')
getUserChoice()
其他:
pc_choise=pc_选项[getPcChoice()]
打印(“\n您选择的”+玩家选择+”和电脑选择的“+电脑选择”)
胜利者()
def checkWinner():
全球个人电脑选择
全球玩家选择
如果(player_choice.lower()==pc_chouse.lower()):
打印(‘领带’)
elif(播放器选择.lower()='r'和pc选择.lower()='p'
或者玩家的选择。lower()='p'和pc选择。lower()='s'
或者播放器的选择。lower()='s'和pc_choose.lower()='r'):

打印(“你赢了!如果你想修改函数中的全局变量,你必须将
global player\u choice
global pc\u choise
添加到函数的顶部。或者更好——重构代码以完全避免全局变量。
getUserChoice
可以很容易地修改为只返回选项而不是修改重构全局。@mario_sunny重构时我应该看什么?要遵循的一些主要步骤?@VladutMaican如果您将此代码作为完整的可运行代码发布,我或其他人可以检查并帮助改进它。如果您要修改函数中的全局变量,您必须添加
全局播放器选项
全局pc_choise
到函数顶部。或者更好-重构代码以完全避免全局变量。
getUserChoice
可以很容易地修改为只返回选择而不是修改全局变量。@mario_sunny重构时我应该看什么?要遵循的一些主要步骤?@VladutMaican如果您将此代码发布到n作为完整的、可运行的代码,我或其他人可以检查它并帮助改进它。