为什么我的数组比较算法给我错误的输出?

时间:2018-09-24 22:38:37

标签: python arrays python-3.x algorithm comparison

所以我试图完成Hackerrank.com的挑战“ Compare The Triplets”,但得到了意外的输出:

Input (stdin)
    5 6 7
    3 6 10
Your Output (stdout)
    0 1
Expected Output
    1 1

因此,我已经有了可以满足挑战要我执行的代码,将一个数组与三个元素进行比较,但是我认为使用一个包含n个元素的数组并对它们进行比较将更加有用。我写了一些代码来尝试使它正常工作,但是输出却不应该如此。目的是比较两个单独数组中元素的值。这是我的代码:

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the compareTriplets function below.
def compareTriplets(a, b):
loopLen = 0
if len(a) > len(b):
    loopLen = len(a)
elif len(a) == len(b):
    loopLen = len(a)
elif len(a) < len(b):
    loopLen = len(b)
for i in range(0, loopLen):
    bob = 0
    alice = 0
    if a[i] > b[i]:
        bob += 1
    elif a[i] == b[i]:
        bob += 0
        alice += 0
    elif a[i] < b[i]:
        alice += 1
    i += 1

return bob, alice

if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')

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

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

result = compareTriplets(a, b)

fptr.write(' '.join(map(str, result)))
fptr.write('\n')

fptr.close()

编辑:在评论中回答的问题

3 个答案:

答案 0 :(得分:1)

您可以压缩列表并从那里进行评估,这现在适用于任何尺寸的列表

alice = [5, 6, 7]
bob = [3, 6, 10]

score = [0,0]

l = list(zip(alice, bob))

for i in l:
    if i[0] > i[1]:
        score[0] += 1
    elif i[1] > i[0]:
        score[1] += 1
    else:  
        pass

print(score)
[1, 1]

答案 1 :(得分:1)

我猜下面的函数可以用于2个列表中的任意数量的元素

def compTrip(a,b):
    alice = 0
    bob = 0
    result = []
    for i, j in zip(a,b):
        if i < j:
            alice = alice + 1
        if j < i:
            bob = bob + 1
    result.append(bob)
    result.append(alice)        
    return(result)

答案 2 :(得分:1)

@Jodast-代码中的错误是您在for循环的每次迭代中都将变量alicebob重新初始化为0。将其从for循环中删除,您的代码将像超级按钮一样工作。

有错误的行(将这些行移出for循环):

bob = 0
alice = 0

快乐编码! :)