You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环迭代次数超出预期,三元组比较Python代码问题求助

向量比较计分问题修复

输入示例

5 6 7
3 6 10

问题现象

尝试比较两个向量对应元素,统计得分更高的一方次数,但循环迭代次数远超预期(是应有次数的三倍),怀疑问题出在全局函数的返回值上(已知返回结果为元组,无此问题)。

原代码

比较函数部分

Alice_wins=0
Bob_wins=0

def compareTriplets(a, b):
    global Alice_wins
    global Bob_wins
    # Write your code here
    for ele in a:
        for i in b:
            if ele>i:
                Alice_wins+=1
            elif ele<i:
                Bob_wins+=1
            else:
                pass
    return Alice_wins, Bob_wins       

主程序部分

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()

问题根源

  1. 嵌套循环错误:外层遍历a的每个元素,内层遍历b的每个元素,导致a中每个元素都和b所有元素比较,总迭代次数为len(a)*len(b)。而题目要求的是对应位置元素逐一比较,只需要len(a)次迭代。
  2. 全局变量冗余:使用全局变量存储得分完全没必要,还会导致重复调用函数时的状态污染。

修复后的代码

def compareTriplets(a, b):
    alice_score = 0
    bob_score = 0
    # 配对两个向量的对应元素,逐一比较
    for a_val, b_val in zip(a, b):
        if a_val > b_val:
            alice_score += 1
        elif a_val < b_val:
            bob_score += 1
    return alice_score, bob_score       

if __name__ == '__main__':
    import os
    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()

修复说明

  • 用zip(a, b)将两个向量的对应元素配对,一次循环完成所有符合要求的比较,迭代次数与向量长度一致。
  • 把计分变量放在函数内部,每次调用函数都是独立计算,避免全局变量带来的副作用。
  • 针对输入示例,对应位置比较后会得到Alice得1分、Bob得1分的结果,符合预期。

内容的提问来源于stack exchange,提问作者Jon370

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:30:48