更好地替代大量的IF语句?价值表

时间:2016-08-16 11:13:22

标签: python algorithm if-statement dictionary

我有一个移动表,根据他们对AI的选择决定玩家是否获胜。 Think Rock,Paper,Scissors有很多动作。 我最终会用Python编写它,但在开始之前,我想知道是否有更好的方法来做这个而不是很多和很多IF语句?

表格如下:

enter image description here

我认为这些动作需要分配数字,或类似的东西?我不知道从哪里开始......

2 个答案:

答案 0 :(得分:8)

你可以用dict吗?像这样:

#dict of winning outcomes, the first layer represents the AI moves, and the inner 
#layer represent the player move and the outcome
ai = {
    'punch' : {
        'punch' : 'tie',
        'kick' : 'wins',
    },
    'stab' : {
        'punch' : 'loses',
        'kick' : 'loses'
    }
}

ai_move = 'punch'
player_move = 'kick'
print ai[ai_move][player_move] #output: wins


ai_move = 'stab'
player_move = 'punch'
print ai[ai_move][player_move] #output: loses

我没有绘制出所有动作,但是你得到了要点

答案 1 :(得分:0)

是的,将决策作为键/值对存储在字典中,并将所有可能的组合作为键和决策作为结果。基本上为可能的移动创建一个查找表。

这可以加快决策速度,但必须存储所有可能的组合。

def tie():
    print("It's a tie!")

def lose():
    print("You lose")

def win():
    print("You win")
moves = { 
     # player_ai action
    'punch_punch': tie,
    'punch_kick': lose,
    'punch_stab': lose,
    <..>
}
player_move = <move>
ai_move = <move>
key = "_".join([player_move, ai_move])
if key in moves:
    # Execute appropriate function
    return moves[key]()
raise Exception("Invalid move")