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 仍大势