迭代函数

写这个是因为今天在廖雪峰老师的教程里做了迭代的练习题,然后留下了自己的答案。本来我以为做的是对的,因为函数的输出结果是对的,我就没有去关函数内部的实现原理。

但其实对于一个题目,如果不限定条件,函数的实现过程其实是千千万万的。但是还是总有一个最优解。今天的题目就限定了使用迭代条件来运算输出,而我确实直接使用了 Python 里的直接求 list 里的最大值最小值的函数了。max 和 min 函数。以下是我的代码,就是返回一个 list 里的最小和最大值。

1
2
3
4
5
6
7
8
9
10
def findMinAndMax(L):
     if len(L) == 0:
         return (None,None)
     elif len(L) == 1:
         x = y = L[0]
         return (x, y)
     else:
         x = max(L)
         y = min(L)
         return (y, x)

等我收到同学的评论说我的做错了,我才发现题目中要我使用的迭代没有使用。再然后等我去看其他同学的代码的时候,发现人家的几乎才是最优解。

1
2
3
4
5
6
7
8
9
10
11
12
13
def findMinAndMax(L):
    min = None
    max = None
    for n in L:
        if min == None:
            min = n
        elif n < min:
            min = n
        if max == None:
            max = n
        elif n > max:
            max = n
    return (min, max)

那么再来说说迭代的定义,Wikipedia 给出的定义是:在计算机科学中,迭代程序中对一组指令(或一定步骤)的重复。它既可以被用作通用的术语(与“重复”同义),也可以用来描述一种特定形式的具有可变状态的重复。

所以我认为我的错误在于:没有认识到迭代的意思和它的代码表现,比如说这个题目中,说要使用迭代,那么就肯定需要使用

1
for n in list:
这样的循环。

而且看了上面的代码后,我发现人家直接命名两个变量为None的做法也很明智。不仅在输出空 list 的时候可以用,而且在只有一个 element 的时候同样有效。

if 函数

今天还遇到的问题就是 if 函数,这个的主要问题是当时把 if 和 while 弄混了,以为 if 也会不停的循环,其实 if 满足条件的时候,只进行一次条件之后的程序。然后就 continue 了。而 while 就会在满足条件的时候一直循环。

再来一段我还没有搞明白的代码:

1
2
3
4
5
6
7
8
9
def trim(s):
    while len(s) > 0:
        if s[0] == ' ':
            s = s[1:]
        elif s[-1] == ' ':
            s = s[:-1]
        else:
            return s
    return s
Leave a Reply