弄清楚为什么一个代码块会产生一定的输出

时间:2013-06-24 05:07:05

标签: python output

考虑以下功能:

def fun(lst):
    for item in lst:
        cmp = 0
        for other in lst:
            if item < other: 
                cmp -= 1
            elif item > other:
                cmp += 1
         if not cmp:
            return item



nums = [1,3,2,2]
print("fun({0}) = {1}".format(nums,fun(nums)))

我知道此代码的输出是:

有趣([1,3,2,2])= 2

但我不知道为什么。有人可以解释为什么这是输出?

有没有人有关于如何更轻松地解释代码块的任何提示......

因为我在考试中显然无法访问python而且我很难弄清楚代码块实际上是做什么的。

谢谢。

3 个答案:

答案 0 :(得分:1)

  

有没有人有关于如何更轻松地解释代码块的任何提示......

写出来。在页面上为每个名称指定自己的空间,并在运行代码时跟踪值的更改。经过一些练习后,您将能够轻松跟踪简单值,只需要写出非标量值。

答案 1 :(得分:1)

首先,代码中的对齐方式错误(“如果不是cmp:”应该是一个位置, 并且最后两行应该与第一行在同一列上,如下所示:

def fun(lst):
    for item in lst:
        cmp = 0
        for other in lst:
            if item < other: 
                cmp -= 1
            elif item > other:
                cmp += 1
        if not cmp:
            return item

nums = [1,3,2,2]
print("fun({0}) = {1}".format(nums,fun(nums)))

fun函数返回第一个数组的项,使得“not cmp”,即cmp!= 0。 cmp是一些数组元素,它们小于给定项目减去数量 数组元素超过项目

  if item < other:
    cmp -= 1
  elif item > other:
    cmp += 1

现在,让我们看一下数组项[1,3,2,2]

1:比自己有3个项目(3,2,2)且不低于自我,所以cmp = 0 - 3 = -3,不返回

3:有3个项目没有比自己少的项目和3个(3,2,2)比自己更多,所以cmp = 3 - 0 = 3,没有回报

2:有一个项目比self(3)和一个项目少(1),cmp = 0,函数返回它(2)

答案 2 :(得分:1)

def fun(lst):
    for item in lst:
        cmp = 0
        for other in lst:
            if item < other: 
                cmp -= 1
            elif item > other:
                cmp += 1
         if not cmp:
            return item

nums = [1, 3, 2, 2]

你的代码有一个嵌套循环,一个for循环中的for循环。

外部for循环为for item in lst,内部for循环为:for other in lst:

循环看起来像这样:

1(outer) - > 1, 3, 2, 2   # 1,3,2,2 are assigned one by one to `other`
3(outer) - > 1, 3, 2, 2
2(outer) - > 1, 3, 2, 2
2(outer) - > 1, 3, 2, 2

首先从外部循环开始,分配给项目的值为1cmp设置为0。 现在它遍历内部循环内的整个列表。

分配给其他人的第一个值是1。现在它检查它是否大于或小于item(在这种情况下为1)并基于此增加或减少cmp的值。 在下一次迭代中,现在为其他人分配3,再次与项目(1进行比较)并根据该值更改cmp的值。同样,它会转移到接下来的两个项目22

现在出现这种情况:

if not cmp: return item

它检查cmp的值是否为假,如果cmp为0(0为假值)则返回该项并且函数终止。 (not 0在{python}中是True

如果条件为假,则它将移回外部​​循环,此时item被赋值为3,然后内部循环继续如上所述,除了事实{{1} 1}}现在是item

内循环实际上做的是它实际上比较了大于或小于当前项目的项目数。

3

如果所有循环都结束且1(outer) - > 1, 3, 2, 2 # cmp is -3, because 3,2,2 are bigger than 1 3(outer) - > 1, 3, 2, 2 # cmp is 3, because 1,2,2 are smaller than 3 2(outer) - > 1, 3, 2, 2 # cmp is 0, because 3 is greater than 2 and 1 is smaller # than 2, so the condition `if cmp` is True for this case # and the function return 2 (i,e. item) 2(outer) - > 1, 3, 2, 2 # this is never reached as function already returned 永远不会变为0,那么你的函数将返回None(函数的默认返回值)。