返回圆形值但仍打印整个小数点

Returning round value but still printing the whole decimal points

所以我想得到我的函数的输出值最多有 4 个小数点。所以我写了returnround(val,4)。但是当我打印带参数的函数时,输出没有四舍五入并显示所有小数点。

def longhike(capacity, *val_weights):
vals=[]
weights=[]
unitval=[]
for i in range (0,len(val_weights),2):
    vals.append(val_weights[i])
    weights.append(val_weights[i+1])
    unitval.append(val_weights[i]/val_weights[i+1])
#print(unitval, vals, weights)
val=0

maxval= max(unitval)
maxidx= unitval.index(maxval)

while capacity>0:
    if weights[maxidx]>=capacity:
        val+= unitval[maxidx]*capacity
        return val
    
    else:
        capacity= capacity-weights[maxidx]
        #print(f'capacity={capacity}')
        val+=vals[maxidx]
        #print(val)
        del vals[maxidx]
        del weights[maxidx]
        del unitval[maxidx]
        #print(vals, weights, unitval, maxidx, maxval)
        maxval= max(unitval)
        maxidx= unitval.index(maxval)
        #print(maxval, maxidx)
        
return round(val,4)
    
print(longhike(50, 60,20,100,50,120,30))
print(longhike(10, 500,30))

您没有在 return 函数中舍入 'val',在第一个 if 语句的末尾,以下应该有效:

def longhike(capacity, *val_weights):

vals=[]
weights=[]
unitval=[]
for i in range (0,len(val_weights),2):
    vals.append(val_weights[i])
    weights.append(val_weights[i+1])
    unitval.append(val_weights[i]/val_weights[i+1])
#print(unitval, vals, weights)
val=0

maxval= max(unitval)
maxidx= unitval.index(maxval)

while capacity>0:
    if weights[maxidx]>=capacity:
        val+= unitval[maxidx]*capacity
        return round(val,4)
    
    else:
        capacity= capacity-weights[maxidx]
        #print(f'capacity={capacity}')
        val+=vals[maxidx]
        #print(val)
        del vals[maxidx]
        del weights[maxidx]
        del unitval[maxidx]
        #print(vals, weights, unitval, maxidx, maxval)
        maxval= max(unitval)
        maxidx= unitval.index(maxval)
        #print(maxval, maxidx)
        
return round(val,4)

print(longhike(50, 60,20,100,50,120,30))
print(longhike(10, 500,30))