我对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'。
如果你能帮我理解或指出正确的方向,我真的很感激。谢谢。
答案 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)
我回到输入(),因为它更容易阅读,并且不用担心。
关于生成"未知格式代码的最后一行的最后一点' f'对于类型' str'"可能意味着它正在尝试格式化数字,但是你给它一个字符串。检查get_optimal_value()返回的值的类型。
这是您的代码的极其粗略的评论版本:
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.
以下是一些可能有用的有用链接: https://www.digitalocean.com/community/tutorials/how-to-index-and-slice-strings-in-python-3 https://pyformat.info
希望上面的一些内容对你有用。