代码需要 debugging.I 我无法弄清楚这些值是如何四舍五入的

Code needs debugging.I am not able to figure out how the values are rounded off

为什么代码在某些不能完全分割的测试用例中无法正确舍入

 #!/bin/python

import math
import os
import random
import re
import sys


# write your code here
def avg(*nums):
    len1=len(nums)
    count=0
    for i in range(len1):
        count=count+nums[i]
    average=count/len1
    return round(average,2)

    
if __name__ == '__main__':


    
    fptr = open(os.environ['OUTPUT_PATH'], 'w')
    
    nums = map(int, raw_input().split())
    res = avg(*nums)
    
    fptr.write('%.2f' % res + '\n')

    fptr.close()

例如:

输入(标准输入)

7

你的输出(标准输出)

7.00

预期输出

7.00

此测试用例是正确的,因为小数点后的数字为 0,但对于如下测试用例: 输入(标准输入)

2 5

你的输出(标准输出)

3.00

预期输出

3.50 另一个例子 输入(标准输入)

-95 -45 -56 48 36 79 -83 -16 -95 -57 1 -95 -61 30 9 -56 18 62 -99 61 40 -32 -69 92 -33 -82 -81 70 21 62 46 7 95 -24 10 66 24 73 16 41 -91 -55 -42 -84 -54 -80 -45 27 -27 -26 -58 -47 88 30 22 -66 46 -68 -24 98 28 11 37 69

你的输出(标准输出)

-6.00

预期输出

-5.98

此处四舍五入不正确,请帮助我调试我的代码

def avg(*nums):
    len1=len(nums)
    count=0
    for i in range(len1):
        count=count+nums[i]
    average=count/len1
    return round(average,2)

变量count和len1都是int。所以,如果输入“2 5”,那么你有“2/5”,整数除法,点后丢失数字。您需要将两者或其中一个变量强制转换为浮动。 示例:

count = 0.

average = float(count) / float(len1)

因为您使用的是 raw_input,我猜这是 Python 2,其中一个整数除以另一个整数得到一个整数。

所以在这里:

nums = map(int, raw_input().split()) # list of integers
# ...

len1=len(nums)  # integer
count=0  # integer
# ...
average=count/len1  # also integer

average 是一个整数。

要解决此问题,请将其中一个操作数转换为 float:

average=count / float(len1)

您的变量类型为 int

所以当你做除法时你会错过实际的精度。 13/2 = 6.5 但因为所有类型都是 int 结果将是 6,你错过了 0.5

然后当你执行 round 只是将实际上是 int 的结果转换为 flaot 并且你总是以 x.00

添加一个float(variable)来解决您的问题