【问题标题】:hackerrank average function in pythonpython中的hackerrank平均函数
【发布时间】:2020-09-10 11:06:35
【问题描述】:

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

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

【问题讨论】:

  • 您可能还想使用float 而不是int 来确保无论python 版本如何,您的平均值都是浮点数。
  • 确实,从 raw_input 判断,这是 Python 2,其中 ints 上的 / 是除法。

标签: python function average


【解决方案1】:
def avg(*nums):
    return sum(nums)/len(nums)

改用这个函数。

【讨论】:

  • 虽然此代码可能会解决问题,including an explanation 关于如何以及为何解决问题将真正有助于提高您的帖子质量,并可能为您带来更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请编辑您的答案以添加解释并说明适用的限制和假设! :)
【解决方案2】:

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

  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】:
    #!/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()
    

    【讨论】:

    • 您是否发现了错误并想自行回答?然后请突出显示您更改的内容。或者这应该是一个更新?那么请使用问题下方的edit链接。
    • 此函数将 2 和 5 的平均值计算为 3 而不是 3.5。这是错的。用上面的答案更改函数以获得正确的结果。
    【解决方案4】:

    代替:

    for i in num:
    

    使用这个:

    for i in nums:
    

    你的代码就可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多