大家好,我尝试运行这段代码,它在大多数测试中都失败了,我不知道问题是什么!!
#!/bin/python
import math
import os
import random
import re
import sys
# write your code here
def avg(*num):
if len(num)==0:
return None
sum=0
for i in num:
sum=sum+i
moy=sum/len(num)
return(moy)
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()
编码时您可以考虑一些更正:
sum=0
- 您正在使用 sum
,这是 Python 的内置函数。
这不是使用预定义名称的有效编码方式。
moy=sum/len(num)
- 这行代码浪费了Python编译器的大量时间,因为你要求它从第一次迭代到最后一次迭代执行计算,其中只需要计算所有数字之和时的最后一次迭代来找到平均。
moy=sum/len(num)
- 当应用于整数时,标准除法符号 (/
) 在 Python 3 和 Python 2 中的运算方式不同。
在 Python 3 中将一个整数除以另一个整数时,除法运算
x / y
表示真正的除法(使用 __truediv__
方法)并产生浮点结果。同时,Python 2 中的相同操作代表了一种经典的除法,它将结果向下舍入到负无穷大(也称为取舍)。
意思是,
5/2
在Python2中是2.00
,而在Python3中是2.50
。
最好进行类型转换:
float()
- 此函数用于将任何数据类型转换为浮点数。
固定代码:
def avg(*num):
if len(num)==0:
return None
sum_num=0
for i in num:
sum_num += i
return(float(sum_num)/len(num))
def avg(*nums):
return sum(nums)/len(nums)
请改用此功能。
#!/bin/python
import math
import os
import random
import re
import sys
# write your code here
def avg(*num):
if len(num)==0:
return None
sum=0
for i in num:
sum=sum+i
moy=sum/len(num)
return(moy)
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()
代替:
for i in num:
使用这个:
for i in nums:
你的代码将会工作。
我使用 python 3 通过了我的 hackerrank 测试。
#!/bin/python3
import math
import os
import random
import re
import sys
def avg(*arg):
return (sum(arg)/len(arg))
# write your code here
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
nums = list(map(int, input().split()))
res = avg(*nums)
fptr.write('%.2f' % res + '\n')
fptr.close()