You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否利用函数参数引用指定变量?(附石头剪刀布蜥蜴史波克函数示例)

能否通过函数参数引用函数内部的特定变量?

咱先直接给结论:没办法直接通过函数的参数值来引用函数内部定义的特定变量。

你看,函数里的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:36:31