廖雪峰还是挺靠谱的

开始跟踪廖雪峰的教程..........................


跟着练习做,有点小程序,自己用了几个办法,随手记录下

循环部分的打印名字练习:

#1 主要考虑到题目要求是打印出 Hello,xxx! 并没有空格,  所以要考虑直接打印name,'!'会变成 xxx !

for name in L:
    name ='Hello,'+ name+'!'
    print(name)

#证明不会改变原数据的值
print(L)


#2 结合前一个章节的学习

for name in L:
    print('Hello,%s!' % name)


学到dict了,对比list 暂时还不能理解为什么dict会查找速度块,特别是"直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。"根本不能理解啊.

按逻辑来讲,或者过程编程的感觉来说,list不是先循环比较名字对不对,得到名字后,记录此时查到的名字的序号,然后直接调出成绩里该序号下的分数.那么在dict里,不也是要比对名字对不对,然后直接输出改名字后对应的分数. 这个查找过程如果不涉及算法,就是从头到尾的一个一个比,怎么会不受表的大小影响,查找时间怎么能稳定咧?


然后是递归函数的作业


# 汉诺塔的移动可以用递归函数非常简单地实现。

# 请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,
# 然后打印出把所有盘子从A借助B移动到C的方法,


分析: 既然是用递归,那就一个一个开始做,

n==1时,自然就是A-->C 函数体是move(1,a,b,c)  打印出方法就是 print(a,'-->',c)

n==2时,A-->B,A-->C,B-->C 那就是

move(1,a,c,b)

move(1,a,b,c)

move(1,b,a,c)

通过调换位置参数得到打印方法

当n>=3时  这时不用去细化考虑怎么设计移动,只要聪明的把n个盘子当成n-1个盘子(当成一个盘子)和1个盘子

那就是依然是在解决两个盘子的问题. 所以步奏是

move(n-1,a,c,b)

move(1,a,b,c)

move(n-1,b,a,c)

跟n==2时完全一样,这就行了.

随便计算下不同盘子数所需要的步数

i=0
def move(n,a,b,c):
    global i
    if n==1:
        print(a,'-->',c)
        i+=1
    else:
        move(n-1,a,c,b)
        move(1,a,b,c)
        move(n-1,b,a,c)

move(5,'A','B','C')
print("共需要移动%d次" %i)

map/reduce 作业1

def normalize(name):
    return  name[0].upper()+name[1::].lower()
L1 =['ADadM','LIsa','barT']
L2 = list(map(normalize,L1))
print(L2)

作业2

from functools import reduce
def prod(L):
    def multi(x,y)
        return x*y
    return reduce(multi,L)
print('3*5*7*9=',prod([3,5,7,9]))



你可能感兴趣的:(廖雪峰还是挺靠谱的)