在 Python 中访问函数外部的变量
Accessing variables outside a function in Python
我正在尝试制作一个非常简单且有点过时的剪刀石头布游戏,仅供玩家使用并通过控制台运行。
我有这样的东西:
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' 来获取谁获胜然后打印一些东西,但是当结果被打印时,用户只知道它是自己的手,而不是机器的手,因为函数只有 returns 谁赢了,如果玩家赢了或输了,很明显很容易弄清楚机器的手,但我认为这是一个了解如何在函数外打印变量的好机会。它会是这样的:
print("Player's hand:", player_hand)
print("Machine's hand:", machine_hand)
有什么想法吗?
您可以 return 一个函数的多个值;只需使用一个元组:
return machine_hand, player_hand, who_win
函数的调用者然后可以解压元组再次成为三个变量:
machine_hand, player_hand, who_won = rps()
这三个变量的名称对于调用者来说是本地的,名称不必匹配;例如,我在解包时使用了who_won
。
你可能想想想rps()
在这里做了多少工作;就个人而言,我会将功能限制为确定谁单独获胜。在一个单独的函数中要求用户输入(你也可以在那里进行验证),在另一个函数中确定计算机选择,并且只有这个函数 return 获胜者:
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
请注意,现在您所要做的就是 return 是 determine_winner()
函数的获胜者。整个游戏陷入无限循环,当玩家不想再玩时结束 (ask_to_play_again()
returns False
).
最后但并非最不重要的提示:确定获胜者就像查字典一样简单。在字典中找出哪只手胜过哪只手。如果手数不相等,则双方都输,否则如果 beats_map[machine_hand] == player_hand
你就知道谁赢了。
为简单起见:为什么不直接在函数内打印结果?因为这听起来像是一个工作属于 rps.
如果您坚持或将来使用 machine_hand,只需 return 多个值,就像@Martijin 提到的那样。
您可以return双手:
(内部函数)
return who_won, machine_hand
(外部函数)
print(*rps())
或使用全局变量(关键字是 "global" - 但请注意,全局变量非常强大!)
你有几个选择:
- Return machine_hand也一样,像这样:
return who_win, machine_hand
在yoir方法之外,你可以通过这种方式得到结果:
who_win, machine_hand = rps()
- 在您的方法之外定义 machine_hand 并将其用作全局变量(这可能是一个 "easier" 选项,但通常最好尽可能避免使用全局变量,因为它们的存在会导致代码混乱):
`
machine_hand = None
def rps():
global machine_hand
# your code..
`
另一点说明:通常最好将输入和数据处理分开几天,因此您可以考虑在外部循环中读取 human_hand 并将其作为参数提供给 rps() 方法。
我正在尝试制作一个非常简单且有点过时的剪刀石头布游戏,仅供玩家使用并通过控制台运行。
我有这样的东西:
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' 来获取谁获胜然后打印一些东西,但是当结果被打印时,用户只知道它是自己的手,而不是机器的手,因为函数只有 returns 谁赢了,如果玩家赢了或输了,很明显很容易弄清楚机器的手,但我认为这是一个了解如何在函数外打印变量的好机会。它会是这样的:
print("Player's hand:", player_hand)
print("Machine's hand:", machine_hand)
有什么想法吗?
您可以 return 一个函数的多个值;只需使用一个元组:
return machine_hand, player_hand, who_win
函数的调用者然后可以解压元组再次成为三个变量:
machine_hand, player_hand, who_won = rps()
这三个变量的名称对于调用者来说是本地的,名称不必匹配;例如,我在解包时使用了who_won
。
你可能想想想rps()
在这里做了多少工作;就个人而言,我会将功能限制为确定谁单独获胜。在一个单独的函数中要求用户输入(你也可以在那里进行验证),在另一个函数中确定计算机选择,并且只有这个函数 return 获胜者:
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
请注意,现在您所要做的就是 return 是 determine_winner()
函数的获胜者。整个游戏陷入无限循环,当玩家不想再玩时结束 (ask_to_play_again()
returns False
).
最后但并非最不重要的提示:确定获胜者就像查字典一样简单。在字典中找出哪只手胜过哪只手。如果手数不相等,则双方都输,否则如果 beats_map[machine_hand] == player_hand
你就知道谁赢了。
为简单起见:为什么不直接在函数内打印结果?因为这听起来像是一个工作属于 rps.
如果您坚持或将来使用 machine_hand,只需 return 多个值,就像@Martijin 提到的那样。
您可以return双手:
(内部函数)
return who_won, machine_hand
(外部函数)
print(*rps())
或使用全局变量(关键字是 "global" - 但请注意,全局变量非常强大!)
你有几个选择:
- Return machine_hand也一样,像这样:
return who_win, machine_hand
在yoir方法之外,你可以通过这种方式得到结果:
who_win, machine_hand = rps()
- 在您的方法之外定义 machine_hand 并将其用作全局变量(这可能是一个 "easier" 选项,但通常最好尽可能避免使用全局变量,因为它们的存在会导致代码混乱):
`
machine_hand = None
def rps():
global machine_hand
# your code..
`
另一点说明:通常最好将输入和数据处理分开几天,因此您可以考虑在外部循环中读取 human_hand 并将其作为参数提供给 rps() 方法。