首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有更好的方法来挑选石头剪刀的赢家吗?

有更好的方法来挑选石头剪刀的赢家吗?
EN

Stack Overflow用户
提问于 2022-10-25 16:38:58
回答 2查看 37关注 0票数 0

漫不经心地学习巨蟒,决定给石头剪刀一把,作为一个快速的项目。进展非常顺利,但我真的陷入了试图缩短代码的过程中,您使用这些代码来比较结果。

代码语言:javascript
复制
def check_results(ai, self):
    if ai == self:
        return 'tralf'
    if self == 'rock':
        if ai == 'paper':
            return False
        else:
            return True
    if self == 'scissors':
        if ai == 'rock':
            return False
        else:
            return True
    if self == 'paper':
        if ai == 'scissors':
            return False
        else:
            return True

ai和self,正如你可能猜到的,是电脑的选择,而玩家的选择只是被传递进来。

关于硬编码的一些事情--这对我来说是非常不满意的,我花了大约20分钟的时间拒绝去做,只是尝试一些随机的东西,看看我能不能把它缩短。

我试过的一件事是让你从一个列表中得到两个玩家的索引,然后通过一个单独的列表来比较它们。不能让它起作用,或者至少不能让它以比硬编码更好的方式工作,所以我放弃了,用无聊的方式做了。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2022-10-25 16:46:59

以可读性和错误检查为代价,可能是这样的:

代码语言:javascript
复制
def did_player_win(player_choice, computer_choice):
    choices = ['scissors', 'paper', 'rock']
    # The order in which the strings appear in the list is important.
    # scissors beats paper
    # paper beats rock
    # rock beats scissors (wraps around)

    return choices[(choices.index(player_choice) + 1) % len(choices)] == computer_choice

player_choice = 'paper'
computer_choice = 'rock'
print(did_player_win(player_choice, computer_choice))

不过,这并不能提供很好的源代码。长篇大论是没有羞耻的(未来的自我会感谢你:)

代码语言:javascript
复制
def did_player_win(player_choice, computer_choice):
    choices = {
        'rock': 'scissors',
        'paper': 'rock',
        'scissors': 'paper'
    }

    return choices[player_choice] == computer_choice
票数 1
EN

Stack Overflow用户

发布于 2022-10-25 16:52:22

下面是使用python 3.10的匹配用例(模式匹配)的解决方案:

代码语言:javascript
复制
def check_results(ai, self):
    if ai == self:
        return 'tralf'
    match (ai, self):
        case ('scissor', 'paper') | ('paper', 'rock') | ('rock', 'scissor'):  # cases where you lose
            return False
        case ('scissor', 'rock') | ('paper', 'scissor') | ('rock', 'paper'):  # cases where you win
            return True


print(check_results('rock', 'rock'))
print(check_results('rock', 'paper'))
print(check_results('paper', 'rock'))
print(check_results('rock', 'scissor'))

结果:

代码语言:javascript
复制
tralf
True
False
False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74197482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档