Python Hackerrank挑战给出〜对标准输出无响应〜错误

时间:2019-11-17 13:34:51

标签: 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()))

    plusMinus(arr)

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

  

〜标准输出无响应〜

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

print(plusMinus(arr))

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

  

(0.5,0.3333333333333333,0.16666666666666666)

代替:

  

0.500000   0.333333   0.166667

我在做什么错?预先感谢。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您没有提供输入,您的代码也没有打印任何内容,因此即使我可以运行它,也不会重现您描述的问题。幸运的是,不难猜测“如何从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?

答案 2 :(得分:0)

在任何地方计算完p,n和z之后,您都没有打印它们,只需将它们返回,当它们返回到调用函数的代码中时,它们不会存储在任何变量中并且不会被打印,这就是为什么说“标准输出无输出” 尝试:

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” ,因为它们已经是整数。