Python—获取满足函数be>;0

Python—获取满足函数be>;0,python,function,object,product,Python,Function,Object,Product,我有以下两个数字列表,一个是数量,另一个是概率: stake=[0,2,5,10,20,50,100] odds=[1,2,5,10,20,50,100] 我已经创建了一个类“bet”,它接受一定数量的变量和一个“.payoff”方法,该方法只是上面列表中每一笔赌注和赔率的乘积 我想看看哪些赌注和赔率的组合满足如下等式,不同“赌注”的总和乘以不同的赌注和赔率组合 def function(stake,odds): for s in stake: for o in odd

我有以下两个数字列表,一个是数量,另一个是概率:

stake=[0,2,5,10,20,50,100]
odds=[1,2,5,10,20,50,100]
我已经创建了一个类“bet”,它接受一定数量的变量和一个“.payoff”方法,该方法只是上面列表中每一笔赌注和赔率的乘积

我想看看哪些赌注和赔率的组合满足如下等式,不同“赌注”的总和乘以不同的赌注和赔率组合

def function(stake,odds):
    for s in stake:
        for o in odds:
            bet_all=(bet1.payout(s,o)
            +1*bet2.payout(s,o)
            -2*bet3.payout(s,o)
            +3*bet4.payout(s,o)
            -1*bet5.payout(s,o)
            +1*bet6.payout(s,o))
            
 find (s,o) combinations where bet_all > 0
我怎样才能得到全部的赌注赔率组合列表,这些组合的总和大于零?
以上代码只会导致错误。 有没有我可以使用的内置软件包

谢谢


编辑

例如,以下随机的s,o组合满足excel中的条件:

def function(stake,odds):
            bet_all=(bet1.payout(2,5)
            +1*bet2.payout(0,2)
            -2*bet3.payout(2,5)
            +3*bet4.payout(5,10)
            -1*bet5.payout(2,20)
            +1*bet6.payout(5,5))>0
问题是我不知道如何打印我刚得到的结果:

<function function at 0x000002CAEBD9A1F8>

一个简单的解决方案只是计算所有的和,然后过滤它们

from itertools import product

def bet(s, o):
    return (bet1.payout(s,o)
        +1*bet2.payout(s,o)
        -2*bet3.payout(s,o)
        +3*bet4.payout(s,o)
        -1*bet5.payout(s,o)
        +1*bet6.payout(s,o))

def function(stake, odds):
    return [ x for s, o in product(stake, odds) if (x := bet(s, o)) > 0 ]

这是对你问题的一种解释的强力解决方案。我删除了对
payout
方法的所有引用,将它们替换为简单的产品
s*o
。我还将总体求和中使用的权重作为函数的一个参数

from itertools import product

def positive_bets(weights,stake,odds):
    pairs = product(stake,odds)
    n = len(weights)
    positives = []
    for bets in product(pairs,repeat = n):
        payout = sum(w*b[0]*b[1] for w,b in zip(weights,bets))
        if payout > 0:
            positives.append(bets)
    return positives

#for testing purposes:

weights = [1,1,-2,3,-1,1]
stake=[0,2,5,10]
odds=[1,2,5,10]

test = positive_bets(weights,stake,odds)
print(len(test))
for bets in test[:3]: print(bets)
输出:

12116129
((0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (2, 1))
((0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (2, 2))
((0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (2, 5))

不幸的是,由于您选择了
赌注
赔率
,这段代码将需要非常长的时间才能运行。暴力很快变得不可行。

“上面的代码只会导致错误。”什么错误,在哪里?我觉得不错(当然最后一行除外)。如果
bet\u all>0
,只需在列表中收集那些
s
o
。我发布了一组满足解决方案的随机s,o组合示例(在excel中完成)但是我不能打印出来-我如何让函数为我做它?这只是一个例子,说明它如何为参数工作,如果
bet1,则将3改为2-happy??支付(s,o)
只是
s*o
(您似乎指出了这一点)--为什么不从您的问题中删除所有这些内容,并用相应的产品替换它们呢?这将是使你的问题更加独立的一种方法。如果你看一下OP的神秘例子,他们正在计算一个和中使用不同的
(s,o)
的和。它不仅仅是两个列表的乘积,更像是乘积的排列。但是,即使这样也不清楚,因为例如,他们使用
(3,5)
两次,所以可能他们允许重复。我不认为这个问题可以用给出的信息来回答。是的,尽管这两个例子如此不同,但我不确定哪一个应该被视为实际请求。我理解OP需要实际的
s,o
组合,即
[(s,o)for s,o in…]
正确,我希望允许重复组合