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
相关产品推荐
相关产品推荐

