Python“问题”:简单的代码,出现错误的计算(关于计算团队分数的代码战争任务)-为什么以及哪里出错了?

问题描述 投票:0回答:1

从代码战争中解决任务(“kata”)。 基于我如何解决问题的简洁和简化的描述:

给定两个包含两支球队的比赛结果的列表

x
y
(始终 10 场比赛)。

例如:

  • x = [1, 2, 3, 4, 2, 1, 1, 2, 2, 3]
  • y = [0, 0, 0, 0, 1, 3, 4, 3, 4, 4]

每场比赛的积分如下:

  • 如果 x > y:3 分(获胜)
  • 如果 x < y: 0 points (loss)
  • 如果 x = y:1 分(平局)

编写一个函数,返回 (x) 队在比赛中获得的分数 根据上述规则获得冠军。

我用两种方式编写代码。

第一个(使用 zip 功能)- 成功了。 第二个(使用for循环)-不。(简单的比较操作无法正常工作,我可以找出原因!)。代码非常简单(见下文,但计算不正确!)。

sum_x[4] == 2
sum_y[4] == 1
结果应该等于 '3' (x > y => 3),但它得到 '1' - 为什么?!

有两种解决任务方法的代码:

1(工作过):

sum_x = [1, 2, 3, 4, 2, 1, 1, 2, 2, 3]
sum_y = [0, 0, 0, 0, 1, 3, 4, 3, 4, 4]
    
def sum_xy():
    x = []

    for k, l in zip(sum_x, sum_y):
        if k > l:
            x.append(3)
        elif k < l:
            x.append(0)
        else:
            x.append(1)
                
    
    return x, sum(x)

输出

([3, 3, 3, 3, **3**, 0, 0, 0, 0, 0], 15)

2(不起作用!):

sum_x = [1, 2, 3, 4, 2, 1, 1, 2, 2, 3]
sum_y = [0, 0, 0, 0, 1, 3, 4, 3, 4, 4]
    
def sum_xy():
    x = []

    for k in sum_x:
        for l in sum_y:
            if k > l:
                x.append(3)
            elif k < l:
                x.append(0)
            else:
                x.append(1)


        return x, sum(x)

输出

([3, 3, 3, 3, **1**, 0, 0, 0, 0, 0], 13)

为什么应该是

1
却有
3
? - 这是我的问题。

python list for-loop zip compare
1个回答
0
投票

版本 2 仅将

sum_x
的第一个元素与
sum_y
的每个元素进行比较。然后,它在外循环第一次迭代结束时返回结果。

如果将

return
语句移到末尾,它仍然是错误的,因为它们会比较两个列表的每个元素,而不仅仅是相应的元素。

如果不想使用

zip()
,则需要使用索引来获取对应的元素。

def sum_xy():
    x = []

    for i, k in enumerate(sum_x):
        l = sum_y[i]
        if k > l:
            x.append(3)
        elif k < l:
            x.append(0)
        else:
            x.append(1)

    return x, sum(x)
© www.soinside.com 2019 - 2024. All rights reserved.