我有一个名为 的列表dispatch,在该列表中,只要有一个正数就意味着充电,只要有一个负数就意味着放电。dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]所以是 0,我开始在 中initial charge添加 的值,对此有上下限制。上限为50,下限为0。我为此编写的程序:dispatchinitial chargedispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]charge = 0soc = []for i in dispatch: if i > 0: charge = min(charge + i, 50)# upper restriction 50 soc.append(charge) else: charge = max(charge - i, 0)# lower restriction 0 soc.append(charge)print(soc)输出:[12, 35, 50, 50, 73, 96, 108, 50, 50, 104, 158, 225]但这是错误的。我的预期输出是:[12, 35, 50, 50, 27, 4, 0, 23, 50, 0, 0, 0]谁能帮忙?
3 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
使用max和的组合min:
soc = [0]
for i in dispatch:
soc.append(min(max(soc[-1] + i, 0), 50))
soc = soc[1:]
print(soc)
输出:
[12, 35, 50, 50, 27, 4, 0, 23, 50, 0, 0, 0]
POPMUISE
TA贡献1765条经验 获得超5个赞
您正在从 中减去负值charge。于是,就变成了charge - (-value)。因为,我们知道 2 个负数形成一个正数。因此,它将添加两个值并选择它,因为它会大于 0。
...
else:
# Add i to charge
charge = max(charge + i, 0)# lower restriction 0
soc.append(charge)
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
也许试试这个:
dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]
charge = 0
soc = []
for i in dispatch:
charge = min(charge + i, 50) if i > 0 else 0
soc.append(charge)
print(soc)
添加回答
举报
0/150
提交
取消