我在Django中创建网络文本游戏。我想让用户选择与银行交换宠物。Exchange表是静态的,不能修改。
1只羊=6只兔子 1只猪=2只羊= 12只兔子=1只羊+6只兔子 1头牛=3头猪=6头羊= 36只兔子等。
现在,如果用户有3头猪,我想告诉他,他可以用3头猪换1头牛,用1头猪换2头羊,用1头猪换12只兔子等等。有什么选项可以用ifs来写吗?或者我可以做一些其他的事情?
models.py
class Players(models.Model):
name = models.CharField(max_length=25) # nazwa gracza
class Game(models.Model):
name = models.CharField(max_length=25) # nazwa gry
turn = models.IntegerField(default=1) # numer gracza ktory aktualnie rzuca
rabbit = models.IntegerField(default=60)
sheep = models.IntegerField(default=24)
pig = models.IntegerField(default=20)
cow = models.IntegerField(default=12)
horse = models.IntegerField(default=6)
small_dog = models.IntegerField(default=4)
big_dog = models.IntegerField(default=2)
class GamePlayer(models.Model):
game = models.ForeignKey(Game, on_delete=models.CASCADE)
player = models.ForeignKey(Players, on_delete=models.CASCADE)
turn = models.IntegerField()
rabbit = models.IntegerField(default=0)
sheep = models.IntegerField(default=0)
pig = models.IntegerField(default=0)
cow = models.IntegerField(default=0)
horse = models.IntegerField(default=0)
small_dog = models.IntegerField(default=0)
big_dog = models.IntegerField(default=0)发布于 2016-05-29 08:33:24
列表项目
如果表是静态的,那么它可以作为一个简单的数据块使用。
下面是您可以处理此问题的示例代码
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()https://stackoverflow.com/questions/37507368
复制相似问题