You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HackerRank正负零比例计算测试失败,求技术协助

问题:计算数组中正数、负数、零的占比(保留6位小数)

给定一个整数数组arr,计算其中正数、负数和零的元素占比,要求每行输出一个结果,且保留6位小数。

用户提供的代码

def plusMinus(arr):
    # Write your code her
    a  = 0
    b = 0
    c = 0
    pos, neg, zer = 0,0,0
    for i in arr:
        if (i >= 1):
            a +=1
            pos = a / len(arr)  
        if (i <= -1):
            b+=1
            neg = b/len(arr)
        if (i==0):
            c+=1
            zer = c/len(arr) 
    
    return(f'{pos:.6f}
{neg:.6f}
{zer:.6f}')
arr = [-4,3,-9,0,4,1]
plusMinus(arr)
print(plusMinus(arr))

代码问题分析与修正

你的代码逻辑框架没问题,但存在几个可优化和修正的细节:

  • 注释拼写错误:# Write your code her 应改为 # Write your code here
  • 循环内重复计算占比:没必要每次统计数量后立刻计算占比,统计完所有数量后统一计算更高效
  • 判断条件可简化:用i > 0判断正数、i < 0判断负数,逻辑更直接严谨
  • 字符串换行格式:在f-string中使用\n明确表示换行,避免格式歧义

修正后的代码

def plusMinus(arr):
    # Write your code here
    count_pos = 0
    count_neg = 0
    count_zero = 0
    total = len(arr)
    
    for num in arr:
        if num > 0:
            count_pos += 1
        elif num < 0:
            count_neg += 1
        else:
            count_zero += 1
    
    # 计算占比并保留6位小数
    pos_ratio = count_pos / total
    neg_ratio = count_neg / total
    zero_ratio = count_zero / total
    
    # 每行输出一个结果
    print(f'{pos_ratio:.6f}')
    print(f'{neg_ratio:.6f}')
    print(f'{zero_ratio:.6f}')

arr = [-4,3,-9,0,4,1]
plusMinus(arr)

输出结果

运行修正后的代码,会得到如下输出:

0.500000
0.333333
0.166667

内容的提问来源于stack exchange,提问作者Arabindra Dhami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 05:08:24