分数背包算法Python输入问题

时间:2017-12-11 00:31:23

标签: python algorithm python-3.x knapsack-problem

我对python有一个初出茅庐的知识,我正试图解决这个背包算法问题。

示例输入/输出是:

输入:

3 50

60 20

100 50

120 30

输出:

180.000

下面是我不理解的代码,它在算法问题的入门代码文件中提供。对于之前的问题集,我一直用input()替换sys.stdin.read(),因为我更了解它。我认为它试图映射输入,因此它最终成为:n = 3,容量= 50,值= [60,100,120],权重= [20,50,30]。

if __name__ == "__main__":
    data = list(map(int, sys.stdin.read().split()))
    n, capacity = data[0:2]
    values = data[2:(2 * n + 2):2]
    weights = data[3:(2 * n + 2):2]
    opt_value = get_optimal_value(capacity, weights, values)
    print("{:.10f}".format(opt_value))

我在堆栈上的某处读取了我可能需要将最后一行更改为:

print(“{!s:10f}”。format(opt_value))

但是产生了不同的错误

ValueError:'str'类型对象的未知格式代码'f'。

如果你能帮我理解或指出正确的方向,我真的很感激。谢谢。

2 个答案:

答案 0 :(得分:1)

您也可以使用以下代码。

if __name__ == "__main__":
data = list(map(int, input().split()))
n, capacity = data
values = [0]*n
weights = [0]*n
for i in range(n):
    values[i], weights[i] = map(int, input().split())
opt_value = get_optimal_value(capacity, weights, values)
print("{:.10f}".format(opt_value))

答案 1 :(得分:0)

  1. 我回到输入(),因为它更容易阅读,并且不用担心。

  2. 关于生成"未知格式代码的最后一行的最后一点' f'对于类型' str'"可能意味着它正在尝试格式化数字,但是你给它一个字符串。检查get_optimal_value()返回的值的类型。

  3. 这是您的代码的极其粗略的评论版本:

    if __name__ == "__main__": #if it's the main program
    data = list(map(int, sys.stdin.read().split())) #make a list of the input, split up and turned into integers.
    n, capacity = data[0:2] #set n and capacity to the first two values in data
    values = data[2:(2 * n + 2):2] set values equal to a subsection of data. Specifically, every second character from index 2 to index (2 * n + 2).
    weights = data[3:(2 * n + 2):2] #the same as the line above, but starting at 3.
    opt_value = get_optimal_value(capacity, weights, values) #set opt_value to whatever the function returns.
    print("{:.10f}".format(opt_value)) #print the value of opt_value in a fancy way. Specifically, as a floating point number. If you're currently feeding it a string, then Python will squawk at you.
    
  4. 以下是一些可能有用的有用链接:   https://www.digitalocean.com/community/tutorials/how-to-index-and-slice-strings-in-python-3   https://pyformat.info

  5. 希望上面的一些内容对你有用。