Django文本游戏交易表

时间:2016-05-29 07:32:48

标签: python django algorithm

我在Django中创建了网络文字游戏。我想让用户选择与银行交易他的宠物。 Exchange表是静态的,无法修改。

  

1只绵羊= 6只兔子

     

1只猪= 2只绵羊= 12只兔子= 1只绵羊+ 6只兔子

     

1头牛= 3头猪= 6头羊= 36头兔等。

现在,如果用户有3头猪,我想向他展示他可以用3头猪交换1头母猪或交易1头猪用于2只绵羊或1头猪用于12只兔子等。 有没有选择用ifs写这个,或者我可以用其他方式吗?

models.py

{{1}}

1 个答案:

答案 0 :(得分:0)

列出项目

如果表是静态的,那么它可以用作简单的字典

以下是您可能会遇到此问题的示例代码

from collections import Counter

# 1 sheep = 6 rabbits
# 
# 1 pig = 2 sheep = 12 rabbits = 1 sheep + 6 rabbits
# 
# 1 cow = 3 pig = 6 sheeps = 36 rabbit etc.

TABLE = {
         'rabbit': 1,
         'sheep': 6,
         'pig': 12,
         'cow': 36,
         }



def get_trades(amount, l=()):
    '''
    Recursive function that returns a list of all possible trades as tuples 
    '''
    if amount < 0 : return [()] # bad trade (not enough money)
    if amount == 0 : return [l] # bingo!!! we have a full trade possibly.
    possible_trades = []        
    animals_sorted = sorted(TABLE, key= lambda key: TABLE[key], reverse=True)
    if l: 
        animals_sorted = animals_sorted[animals_sorted.index(l[-1]):] #preventing duplicates - since order doesn't matter
    for something in animals_sorted:
        value = TABLE[something]

        trades = get_trades(amount-value, l + (something,)) #get possible trades for l+something ...
        possible_trades.extend(trades)
    return possible_trades

def get_trades_counters(amount):
    return [Counter(t) for t in get_trades(amount)]


def main():
    print(get_trades_counters(TABLE['pig']))
    print(get_trades_counters(2*TABLE['pig']))
    print(get_trades_counters(2*TABLE['cow']))


if __name__ == '__main__':
    main()