HackerRank比较Triplet。 JavaScript解决方案与Python3

时间:2017-09-16 22:56:45

标签: javascript python-3.x

所以,我正在尝试解决来自HackerRank(https://www.hackerrank.com/challenges/compare-the-triplets/problem)的比较三胞胎问题。

我的JavaScript解决方案传递了所有测试用例,但Python3失败了一些(HackerRank不允许查看哪些)。正如您所看到的,我遵循相同的逻辑,但在Python中它并不起作用。我的Python和JS代码有什么区别?

JS:

function solve(a0, a1, a2, b0, b1, b2){
var alice = ( a0 > b0 ? 1 : 0 ) + ( a1 > b1 ? 1 : 0 ) + ( a2 > b2 ? 1 : 0 );
var bob = ( a0 < b0 ? 1 : 0 ) + ( a1 < b1 ? 1 : 0 ) + ( a2 < b2 ? 1 : 0 );

return [alice, bob];

}

Python3:

def solve(a0, a1, a2, b0, b1, b2):
alice = 1 if a0 > b0 else 0 + 1 if a1 >v b1 else 0 + 1 if a2 > b2 else 0
bob = 1 if a0 < b0 else 0 + 1 if a1 < b1 else 0 + 1 if a2 < b2 else 0
return (alice, bob)

6 个答案:

答案 0 :(得分:2)

在每个if / else

之后使用括号
        alice = (1 if (a0>b0) else 0) + (1 if (a1>b1) else 0) + (1 if (a2>b2) else 0)
        bob = (1 if (a0<b0) else 0) + (1 if (a1<b1) else 0) + (1 if (a2<b2) else 0)

答案 1 :(得分:1)

def compareTriplets(a, b):
    total_a = 0
    total_b = 0
    for i in range(len(a)):
        if a[i] > b[i]:
            total_a = total_a + 1
        elif a[i] < b[i]:
            total_b = total_b + 1
    return (total_a, total_b)

幸运的是,我得到了与Geraldo Braho相同的逻辑,但是在“ For Loop Expression”中却难以理解逻辑,我得到的答案是我需要在“ len(a)/ len(b)前使用范围)”,因为在这种情况下两者的长度相同。非常感谢Geraldo Braho先生教我,我们需要在“ For循环表达式”中使用“ range(len(a))”。

https://geraldo1993.github.io/articles/Compare-the-Triplets/

答案 2 :(得分:0)

您应该在每个if / else语句后使用括号。因为python bool需要括号以达到100%的准确率。比较具有比布尔运算符更高的优先级。这是你修改过的代码:

def solve(a0, a1, a2, b0, b1, b2):
  a = (1 if a0 > b0 else 0) + (1 if a1 > b1 else 0) + (1 if a2 > b2 else 0)
  b = (1 if a0 < b0 else 0) + (1 if a1 < b1 else 0) + (1 if a2 < b2 else 0)
  return (a,b)

答案 3 :(得分:0)

我希望,这也有帮助

a = list(map(int, input("Enter The First input").split()))
b = list(map(int, input("Enter The Second input").split()))

a_score = b_score = 0

for i in range(len(a)):
    if a[i] > b[i]:
        a_score += 1
    elif a[i] < b[i]:
        b_score +=1
    else:
        pass

print(a_score, b_score)

答案 4 :(得分:0)

def compareTriplets(a, b):
d, g = (0, 0)
for i in range(len(a)):
    if a[i] > b[i]:
        d += 1
    elif b[i] > a[i]:
        g += 1
return d, g


a = [int(i) for i in input('value of a').split(",")]
b = [int(i) for i in input('value of a').split(",")]
print(compareTriplets(a, b))

答案 5 :(得分:0)

就像其他人回答的一样,您需要在布尔操作中加上括号。但是对于您的python代码,这是一种更好的编写方式。

def compareTriplets(a, b):
    alice = sum(1 for i in range(len(a)) if a[i] > b[i] and not a[i] == b[i])
    bob = sum(1 for i in range(len(a)) if a[i] and not a[i] == b[i] and not a[i] > b[i])
    return [alice, bob]

alice和bob变量中的每一行都在一个范围内循环(在这种情况下,我们将数组a的长度放入,因为a和b数组都具有相同的长度),并且将产生1的值每次条件,

if a[i] > b[i] and not a[i] == b[i](代表爱丽丝),

if a[i] and not a[i] == b[i] and not a[i] > b[i] for bob满意,

然后将其求和为alice和bob的每个变量的整数值。黑客等级中的问题要求您将其显示在数组中,因此您需要将其作为数组返回。

相关问题