代码需要 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)
来解决您的问题
为什么代码在某些不能完全分割的测试用例中无法正确舍入
#!/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)
来解决您的问题