开始跟踪廖雪峰的教程..........................
跟着练习做,有点小程序,自己用了几个办法,随手记录下
循环部分的打印名字练习:
#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]))