我正在使用Python 3,代码如下
# Uses python3
import sys
def get_optimal_value(capacity, weights, values):
value = 0.
left_space=capacity
vpw=[]
for i in range (0,len(weights)-1):
print (i)
vpw.append(values[i]/weights[i])
vpw_s=[]
v_s=[]
w_s=[]
k=0
vpw=list(vpw)
print (type(vpw))
while (len(vpw) > 0):
j = vpw.index(max(vpw))
vpw_s.append(vpw[j])
v_s.append(values[j])
w_s.append(weights[j])
vpw=vpw.pop(j)
k=k+1
for i in range (0, len(w_s)-1):
if (left_space> 0):
w_u=min(w_s[i],left_space)
value=value+w_u*vpw_s[i]
# write your code here
return value
if __name__ == "__main__":
opt_value = get_optimal_value(10, [3,4,1], [10,12,80])
print("{:.10f}".format(opt_value))
这给出了一个错误-
<class 'list'>
Traceback (most recent call last):
File "/home/main.py", line 35, in <module>
opt_value = get_optimal_value(10, [3,4,1], [10,12,80])
File "/home/main.py", line 16, in get_optimal_value
while (len(vpw) > 0):
TypeError: object of type 'float' has no len()
变量vpw
是否不是类型列表?
答案 0 :(得分:0)
问题不在于您第一次执行while
,而是第二次。您已进入循环:
vpw=vpw.pop(j)
但是,return value from pop()
实际上是您弹出的元素,并且列表已在适当位置修改,因此您将vpw
从列表更改为浮点数,因此第二次执行{ {1}}您正在尝试以浮点数进行while
。简单的解决方法是删除作业:
len()
答案 1 :(得分:0)
问题不是在第一次迭代时发生,而是在第二次以后,您说{result ->
tempTextView.text = "${result.main.temp}"
minTempTextView.text = "${result.main.temp_min}"
},
,vpw=vpw.pop(j)
从该索引返回值并从列表中删除,因此vpw是现在是浮点数。您可以通过将打印类型放入while循环中来尝试此操作。我建议阅读this,以了解您要做什么,我相信您需要pop
。