Python 2中的TicTacToe项目:我试图避免使用全局变量并返回变量

时间:2017-05-18 00:28:47

标签: python python-2.7 tic-tac-toe

我正在研究一个项目,我不知道如何避免使用全局变量。我有一个执行位和碎片的函数列表,但我无法在它们之间传递变量!

这是我目前的代码:

===================

def player_names_input():
    global player_A_name,player_B_name
    player_A_name = raw_input("Please enter name for Player A    :   ")
    player_B_name = raw_input("Please enter name for Player B    :   ")

def coin_flip():
    global player_A_name,player_B_name,start_player,end_player,game_state
    game_state = "running"
    import random
    print "\nFlipping a coin to see who starts first..."
    random_int = random.randint(0, 1)
    if random_int == 0:
        coin = 'Heads'
        start_player = player_A_name
        end_player = player_B_name
    else:
        coin = 'Tails'
        start_player = player_B_name
        end_player = player_A_name
    print '\nCoin flip --> ',coin
    print '\nStarting player --> ',start_player
    print '\nStarting player gets "X"'

player_names_input()
coin_flip()

这是我尝试使用return而不是global:

=============================================== ==========

def player_names_input():
    player_A_name = raw_input("Please enter name for Player A    :   ")
    player_B_name = raw_input("Please enter name for Player B    :   ")
    return player_A_name,player_B_name

def coin_flip(player_A_name,player_B_name):
    game_state = "running"
    import random
    print "\nFlipping a coin to see who starts first..."
    random_int = random.randint(0, 1)
    if random_int == 0:
        coin = 'Heads'
        start_player = player_A_name
        end_player = player_B_name
    else:
        coin = 'Tails'
        start_player = player_B_name
        end_player = player_A_name
    print '\nCoin flip --> ',coin
    print '\nStarting player --> ',start_player
    print '\nStarting player gets "X"'

player_names_input()
coin_flip(player_A_name,player_B_name)

1-请帮助我的第二个代码运行,我真的想避免全局变量,因为每个人都建议。 2-请批评我的代码,我在开始,我正在努力学习编写好的代码(而不仅仅是代码)。我的尝试有多糟糕?

1 个答案:

答案 0 :(得分:1)

由于您已定义player_names_input()以返回2元组(两个值,player_A_nameplayer_B_name),您可以在您使用的范围内分配它们功能,

player_A_name, player_B_name = player_names_input()

现在,当调用它时:

coin_flip(player_A_name, player_B_name)

这两个变量可供使用。

您可能需要考虑将实际主程序包装在主要方法中,如

def main():
    player_A_name, player_B_name = player_names_input()
    coin_flip(player_A_name, player_B_name)

并且如果直接执行该文件,则调用此方法 - 通过将魔术__name__变量检查为等于字符串'__main__'来完成此操作,因此将其添加到程序文件的末尾。< / p>

if __name__ == '__main__':
    main()