我在Django中创建了网络文字游戏。我想让用户选择与银行交易他的宠物。 Exchange表是静态的,无法修改。
1只绵羊= 6只兔子
1只猪= 2只绵羊= 12只兔子= 1只绵羊+ 6只兔子
1头牛= 3头猪= 6头羊= 36头兔等。
现在,如果用户有3头猪,我想向他展示他可以用3头猪交换1头母猪或交易1头猪用于2只绵羊或1头猪用于12只兔子等。 有没有选择用ifs写这个,或者我可以用其他方式吗?
models.py
{{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()