能否利用函数参数引用指定变量?(附石头剪刀布蜥蜴史波克函数示例)
能否通过函数参数引用函数内部的特定变量?
咱先直接给结论:没办法直接通过函数的参数值来引用函数内部定义的特定变量。
你看,函数里的scissors、rock这些变量都是函数的局部变量,它们的作用域仅限于函数内部,外部(包括你传入的参数)根本看不到这些变量。你现在代码里的逻辑其实是有问题的——当你传入'rock'作为player1参数时,player1只是个字符串'rock',和函数内部定义的那个rock列表完全是两回事,所以if str(player2) in player1:这行代码其实是在判断player2的字符串是不是包含在player1的字符串里,比如你调用rock_paper_scissors_lizard_spock('rock','spock')时,就是在判断'spock'是不是在'rock'这个字符串里,这显然不是你想要的逻辑对吧?
那要实现你原本想做的“判断player1的选项能不能击败player2”的功能,其实可以换个思路:把每种选项和它能击败的目标做成一个字典映射,这样就能通过参数的字符串值直接找到对应的击败列表了。修改后的代码大概是这样:
def rock_paper_scissors_lizard_spock(player1, player2): # 用字典把每个选项和它能击败的目标对应起来 beats = { 'scissors': ['paper','lizard'], 'rock': ['lizard', 'scissors'], 'paper': ['rock','spock'], 'lizard': ['spock','paper'], 'spock': ['scissors','rock'] } # 先做个输入合法性检查,避免传入无效选项 if player1 not in beats or player2 not in beats: print('Invalid input! Please enter rock/paper/scissors/lizard/spock.') return # 核心判断逻辑 if player2 in beats[player1]: print('player 1 wins') elif player1 in beats[player2]: print('player 2 wins') else: print('It\'s a tie!') # 测试调用,这里spock能击败rock,所以会输出player 2 wins rock_paper_scissors_lizard_spock('rock','spock')
这样改了之后,你传入的player1字符串就能作为字典的键,直接获取到它对应的击败列表,完美实现你原本的需求~
内容的提问来源于stack exchange,提问作者mikael
相关产品推荐
相关产品推荐

