所以,我正在尝试解决来自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)
答案 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的每个变量的整数值。黑客等级中的问题要求您将其显示在数组中,因此您需要将其作为数组返回。