python 中的 hackerrank 平均函数

问题描述 投票:0回答:5

大家好,我尝试运行这段代码,它在大多数测试中都失败了,我不知道问题是什么!!

#!/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()
python function average
5个回答
3
投票

编码时您可以考虑一些更正:

  1. sum=0
    - 您正在使用
    sum
    ,这是 Python 的内置函数。 这不是使用预定义名称的有效编码方式。

  2. moy=sum/len(num)
    - 这行代码浪费了Python编译器的大量时间,因为你要求它从第一次迭代到最后一次迭代执行计算,其中只需要计算所有数字之和时的最后一次迭代来找到平均。

  3. 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))

3
投票
def avg(*nums):
    return sum(nums)/len(nums)

请改用此功能。


0
投票
#!/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()

0
投票

代替:

for i in num:

使用这个:

for i in nums:

你的代码将会工作。


0
投票

我使用 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()
© www.soinside.com 2019 - 2024. All rights reserved.