List和while循环 - Python

时间:2014-10-12 19:23:50

标签: python python-3.x

我对Python很陌生,我被困在一个特定的问题上,我想我会问你们。

以下内容包含我的代码以及其中的问题:

list=[100,20,30,40 etc...]

只是一个列表,其中包含不同的数值,表示以克为单位的对象权重。

object=0

while len(list)>0:
   list_caluclation=list.pop(0)
   print(object number:",(object),"evaluates to")

我接下来要做的是评估列表中的项目。因此,如果我们使用index [0],我们的列表值为100.我想将它分成更小的部分,例如,对于100克对象,可以将其分成5个20克单位。如果拆分的值是35,那么它将是一个20克单位,10克单位和一个5克单位。

我要拆分的五个单位是:20,10,5,1和0.5。

如果有人对我的问题有快速提示,我们将不胜感激。

此致

2 个答案:

答案 0 :(得分:0)

你可以通过双循环来实现它。外部循环将是您输入的数字,内部循环将是您要评估的(即[20,10,5,1,0.5])。对于内循环的每次迭代,找到进入数字的次数(使用floor方法),然后使用modulo运算符重新分配数字是剩下的。在每个循环中,你可以打印出你想要的信息:)我不确定你正在寻找什么样的输出,但我希望这有帮助!

例如:

import math
myList=[100,20,30,40,35]
values=[20,10,5,1,0.5]
for i in myList:
    print(str(i)+" evaluates to: ")
    for num in values:
        evaluation=math.floor(i/num)
        print("\t"+str(num)+"'s: "+str(evaluation))
        i%=num

答案 1 :(得分:0)

你应该考虑首先解决这个问题。因此,您基本上要做的是将数字拆分为已知组件的分区。这也称为Change-making problem。您可以为此选择一个贪婪算法,只要它仍然可能,它总是占用最大的组件大小:

units = [20, 10, 5, 1, 0.5]
def change (number):
    counts = {}
    for unit in units:
        count, number = divmod(number, unit)
        counts[unit] = count
    return counts

因此,这将返回一个字典,该字典从每个单元映射到达到目标号码所需的单位数。

您只需要为原始列表中的每个项目调用该函数。