Skip to main content
 首页 » 编程设计

python之在 Python 中访问函数外部的变量

2025年05月04日14youxin

我正在尝试制作一个非常简单且有点过时的剪刀石头布游戏,仅供玩家使用并通过控制台运行。

我有这样的东西:

def rps(): 
    player_hand = input('>_') 
 
    machine_hand_opt = ['rock', 'paper', 'scissors'] 
    machine_hand = random.choice(machine_hand_opt) 
 
    who_win = machine 
    if machine_hand == 'rock' and player_hand == 'scissors': 
        who_win 
        return who_win 
    elif clown_hand == 'rock' and player_hand == 'paper': 
        who_win = 'user' 
        return who_win 

这只是一部分代码,剩下的你可以想象。如您所见,机器手是从列表中随机选择的,我使用变量'who_win'来获取谁赢了然后打印一些东西,但是当打印结果时,用户只知道它是自己的手,而不是机器的手,因为函数只返回谁赢了,如果玩家赢了或输了,很明显很容易弄清楚机器的手,但我认为这是一个了解如何在函数外打印变量的好机会。它会是这样的:

print("Player's hand:", player_hand) 
print("Machine's hand:", machine_hand) 

有什么想法吗?

请您参考如下方法:

您可以从一个函数返回多个值;只需使用一个元组:

return machine_hand, player_hand, who_win 

函数的调用者然后可以再次解压元组为三个变量:

machine_hand, player_hand, who_won = rps() 

这三个变量的名称对于调用者来说是本地的,名称不必匹配;例如,我在解包时使用了 who_won。

你可能想想想 rps() 在这里做了多少工作;就个人而言,我会将功能限制为确定谁单独获胜。在一个单独的函数中要求用户输入(你也可以在那里进行验证),在另一个函数中确定计算机选择,并让这个函数只返回获胜者:

def game(): 
    while True: 
        player_hand = ask_player_for_choice() 
        machine_hand = determine_machine_choice() 
        who_won = determine_winner(player_hand, machine_hand) 
        display_winner(player_hand, machine_hand, who_won) 
        if not ask_to_play_again(): 
            return 

请注意,现在您需要返回的只是来自 determine_winner() 函数的获胜者。整个游戏进入无限循环,当玩家不想再玩时结束(ask_to_play_again() 返回 False)。

最后但并非最不重要的提示:确定获胜者就像查字典一样简单。在字典中找出哪只手胜过哪只手。如果手不相等,则双方都输,否则如果 beats_map[machine_hand] == player_hand 你就知道谁赢了。