尝试从函数赋值时,全局变量不起作用



我正在学习Python,我对gobal变量有问题。我已经全局定义了变量,然后使用global关键字从函数中分配它们。但是,当它运行脚本时,它仍然无法分配变量。

看看这个解决方案,在函数中使用全局变量,我不知道为什么他的代码可以工作,而我的代码中的逻辑却失败了。搞不清楚,在这个小问题上纠缠了好几个小时。

def player_input():
player_1_name = input('Please enter your name Player 1.')
player_2_name = input('Please enter your name Player 2.')
player_1_symbol='None'
player_2_symbol=''
allowed_symbol=['X','O']
symbol_accepted = False
def get_symbol():
global player_1_symbol
player_1_symbol = input('Please enter your preferred symbol {}. It can be either X or O.   '.format(player_1_name))
print('value of symbol after assignment: '+ player_1_symbol)
def validate_symbol():
global symbol_accepted
print('value of symbol when process started: '+ player_1_symbol)
if player_1_symbol.upper() in allowed_symbol:
print('it passed')
symbol_accepted = True
else:
print('it came here, because it did not find the value of player_1_symbol')
get_symbol()
while symbol_accepted == False:
validate_symbol()
if player_1_symbol.upper() == 'O':
player_2_symbol = 'X'
else:
player_2_symbol = 'O'
print("{}, unfortunately you don't have choice. You have been assigned the symbol {}.".format(player_2_name,player_2_symbol))

我试图实现的结果是,我想从get_symbol函数中assign player_1_symbol到全局变量。symbol_accepted也是如此。没有分配任何变量。我正在打印它们,但我不明白为什么它不起作用。我在youtube上看到了一些视频和一些文章。

我看到了一些关于输入验证的其他视频/文章,但一旦我开始这项工作,我想了解它的问题,以便将来可以使用global

我创建了一个带有player_symbol的数组(player_1为0,player_2为1(,以便正确分配变量。我还修复了validate_symbol重复的错误,因为symbol_acceptd有同样的错误。

def player_input():
player_1_name = input('Please enter your name Player 1.')
player_2_name = input('Please enter your name Player 2.')
player_symbols = ["", ""]
allowed_symbol = ['X', 'O']
symbol_accepted = False
def get_symbol():
player_symbols[0] = input(
'Please enter your preferred symbol {}. It can be either X or O.   '.format(player_1_name))
print('value of symbol after assignment: ' + player_symbols[0])
def validate_symbol(symbol_accepted):
print('value of symbol when process started: ' + player_symbols[0])
if player_symbols[0].upper() in allowed_symbol:
print('it passed')
symbol_accepted = True
else:
print('it came here, because it did not find the value of player_1_symbol')
get_symbol()
return symbol_accepted
while symbol_accepted == False:
symbol_accepted = validate_symbol(symbol_accepted)
if player_symbols[0].upper() == 'O':
player_symbols[1] = 'X'
else:
player_symbols[1] = 'O'
print("{}, unfortunately you don't have choice. You have been assigned the symbol {}.".format(player_2_name,
                            player_symbols[1]))
player_input()

最新更新