python - 将值分配给不同的列表(算法)

时间:2016-10-27 23:45:02

标签: python algorithm

描述

我的大学项目研究存在问题。这是一个简单的例子:

python - distribute values to different lists

  • 有一些地点(来源 - 左侧)有特定数量的物品。
  • 这些来源连接到某些(并非所有)目的地位置(右侧)。
  • 目的地有最低金额
  • 特别是“绿色”的(Dest. X),因为它是优先的。如果来源的项目太少,那么实现该目的地的最小数量比其他目的地更重要。
  • 某些目的地可以携带最多的物品。

问题/方法

我已经开始使用python脚本来处理它了。它会随机创建项目sourcesdestinations。但我不知道如何分发mininum amountsmaximum_amounts,优先顺序以及事实上所有项目,并非所有来源都连接到所有目的地。

欢迎使用任何方法,最好使用几行代码:)

提前致谢

1 个答案:

答案 0 :(得分:0)

这是我的方法:

import random
nums = [100]+[200]+[500]
#used to check if the vars have been chekd b4
xc = 0
yc = 0
zc = 0

#define Sources:
a = random.choice(nums) #I decided to define them at random
b = random.choice(nums)
c = random.choice(nums)
d = random.choice(nums)

#Define Destinations:
x = 0 #min: 500
y = 0 #min: 100 #max: 200
z = 0 #min: 300

#prioritize:
pri = 0
if a+b+c < 500:
    pri = 1

#fill x:
if pri == 0:
    if a >= 500 and xc == 0:
        x += a
        a -= a
        xc = 1
    if b >= 500 and xc == 0:
        x += b
        b -= b
        xc = 1
    if c >= 500 and xc == 0:
        x += c
        c -= c
        xc = 1
if pri == 1:
    x += a+b+c
    a -= a
    b -= b
    c -= c
#we didnt test for d bcus its not cond

#fill y:
if b >= 100 and b <= 200 and yc == 0:
    y += b
    b -= b
    yc = 1
if c >= 100 and b <= 200 and yc == 0:
    y += c
    c -= c
    yc = 1
if d >= 100 and b <= 200 and yc == 0:
    y += d
    d -= d
    yc = 1

#fill z:
if a >= 300 and zc == 0:
    z += a
    a -= a
    zc = 1
if c >= 300 and zc == 0:
    z += c
    c -= c
    zc = 1
if d >= 300 and zc == 0:
    z += d
    d -= d
    zc = 1

#test if it is filled:
print("X: "+"{}".format(x)+"/500+")
print("Y: "+"{}".format(y)+"/100_200")
print("Z: "+"{}".format(z)+"/300+")
#X:
if x >= 500:
    print("X filled correctly!")
if x < 500:
    print("X not filled!")
#Y:
if y >= 100 and y <= 200:
    print("Y filled correctly!")
if y < 100:
    print("Y not filled!")
if y > 200:
    print("Y over-filled!")
#Z:
if z >= 300:
    print("Z filled correctly!")
if z < 300:
    print("Z not filled!")

input()#waits for you to end it manually

有时X不会被填充,尽管一个值为500,因为d未连接到X(d有时可能为500)

对不起,如果我错了!我不太擅长数学,我花了一段时间(希望)了解OP想要的东西。 希望我至少帮助了一些方面哈哈。 (必须使用大量代数)