Python Hackerrank挑战给出了〜stdout没有响应〜错误

Posted

技术标签:

【中文标题】Python Hackerrank挑战给出了〜stdout没有响应〜错误【英文标题】:Python Hackerrank challenge gives ~ no response on stdout ~ error 【发布时间】:2019-11-17 13:34:51 【问题描述】:

挑战是

给定一个整数数组,计算其元素的分数 是正数、负数和零。打印十进制值 每个分数都换行。

这是我的代码:

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the plusMinus function below.
def plusMinus(arr):
    l = len(arr) #get length of the array
    p = 0 #positive ints
    n = 0 # negative ints
    z = 0 # zeroes
    for i in range(0, len(arr)):
        if arr[i] > 0:   #check if num is positive
            p = p+1
        elif arr[i] < 0:    #check if num is negative
            n = n+1
        else: z = z+1     #check if num is zero

    return p/l, n/l, z/l

if __name__ == '__main__':
    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    plusMinus(arr)

由于某种原因,它说我的输出是

~stdout 没有响应~

所以我尝试将函数放在这样的打印函数中:

print(plusMinus(arr))

它确实输出了挑战的正确答案,但我猜这不是hackerrank期望的正确格式,它说输出是:

(0.5, 0.3333333333333333, 0.16666666666666666)

代替:

0.500000 0.333333 0.166667

我做错了什么?提前致谢。

【问题讨论】:

您是否尝试过对答案进行四舍五入以符合预期输出? 【参考方案1】:

在 python 中,当你从一个函数返回多个值时,它会返回一个包含值的元组。 在你的情况下,我会打印元组的每个变量。

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the plusMinus function below.
def plusMinus(arr):
    l = len(arr) #get length of the array
    p = 0 #positive ints
    n = 0 # negative ints
    z = 0 # zeroes
    for i in range(0, len(arr)):
        if arr[i] > 0:   #check if num is positive
            p = p+1
        elif arr[i] < 0:    #check if num is negative
            n = n+1
        else: z = z+1     #check if num is zero

    return p/l, n/l, z/l

if __name__ == '__main__':
    n = int(input())

    arr = list(map(int, input().rstrip().split()))

    p, n, z = plusMinus(arr)
    print(p, n, z)

【讨论】:

【参考方案2】:

在任何地方计算 p、n 和 z 之后,您还没有打印它们,您只需返回它们,当它们返回到调用函数的代码时,它们不会存储在任何变量中,也不会打印,那就是为什么它说 “stdout 上没有输出” 试试:

def plusMinus(arr):
    l = len(arr) #get length of the array
    p = 0 #positive ints
    n = 0 # negative ints
    z = 0 # zeroes
    for i in range(0, len(arr)):
        if arr[i] > 0:   #check if num is positive
            p = p+1
        elif arr[i] < 0:    #check if num is negative
            n = n+1
        else: z = z+1     #check if num is zero

    print (p/1, n/1, z/1) # Changed Part

希望这可行

我也认为 p,n,z 不需要除以 "/1",因为它们已经是整数了。

【讨论】:

【参考方案3】:

您没有提供输入,并且您的代码没有打印任何内容,因此即使我可以运行它,它也不会重现您描述的问题。幸运的是,不难猜到你对“如何从 python 函数返回多个值”有问题

你的函数有多个返回值,因此它返回一个元组。当你打印一个元组时,它有括号。

def f():
    return 1/2, 1/3, 1/6

t = f()
print (t)
a, b, c = f()
print (a, b, c)

(0.5, 0.3333333333333333, 0.16666666666666666) 0.5 0.3333333333333333 0.16666666666666666

您可以使用 * 解包元组,因此您可以将每个元素作为单独的参数传递给 print,如下所示:

print (*f())

但通常,如果您要返回多个值,最好为每个返回值使用命名良好的变量,以便在调用代码中清楚地知道发生了什么。

positives, negatives, zeroes = get_plusminus_ratios(data)

这个链接似乎有很多信息 How do I return multiple values from a function?

【讨论】:

以上是关于Python Hackerrank挑战给出了〜stdout没有响应〜错误的主要内容,如果未能解决你的问题,请参考以下文章

调查了 71000 名开发者发现,JavaScript 最知名,Python 仍大势

[不使用TOP的SELECT SSMS的最后一行Hackerrank挑战者

尝试 - 联系人 - Hackerrank

Arts·St 挑战二周目

在hackerrank中因超时而终止[关闭]

为啥在头文件中声明并在文件中定义会给出多个定义错误?