python学习笔记
最近在学习python,使用过程中有个List和dict的声明比较特殊,在此备注下
字典是可变对象,初始化一定不能放在for循环前面
List声明必须放在程序开头(按道理List也是可变对象,但不知道为什么一定要在刚开始时就声明)
代码中如果names=[]放在for循环里面, 其names.append()完后,print names永远只打印最后一个值;另外下面代码中dic={}的声明刚开始放在for循环前面,也会导致字典表的打印一直打印最后一次的内容
以下代码是练习Vamei老师给的题目,返回文本中分数小于60的人名
record.txt内容如下:
# name, age, score tom, 12, 86 Lee, 15, 99 Lucy, 11, 58 Joseph, 19, 56
我自己研究完写了这么一段:
def readFiles(): L=[] names=[] f=open("E:\\record.txt","r") for line in f: dic={} if line[0]=="#": li0=line[1:-1].split(",") #print li0 else: li1=line[0:-1].split(",") #print li1 dic["name"]=li1[0] dic["age"]=li1[1] dic["score"]=li1[2] L.append(dic) print L f.close() for i in range(len(L)): #print L[i]["score"] #names=[] if L[i]["score"]<"60": names.append(L[i]["name"]) #print names print names
vamei老师的教程不错,写的简单明了,适合新手入门。http://www.cnblogs.com/vamei/tag/Python/default.html?page=3
为了完成练习中部置的功能,将上面的代码再加了一点功能,这里做个记录。
def readFiles(): L=[] names0=[] names1=[] names3=[] scoreSum=0 f=open("E:\\record.txt","r") for line in f: dic={} if line[0]=="#": li0=line[1:-1].split(",") #print li0 else: li1=line[0:-1].split(",") #print li1 dic["name"]=li1[0] dic["age"]=li1[1] dic["score"]=li1[2] L.append(dic) print L f.close() for i in range(len(L)): #print L[i]["score"] diccc={} if L[i]["score"]<"60": names0.append(L[i]["name"]) #print names if L[i]["name"][0]=="L": names1.append(L[i]["name"]) scoreSum=scoreSum+int(L[i]["score"]) #names3.append(L[i]["name"].capitalize()) diccc['name']=L[i]["name"].capitalize() diccc['age']=L[i]["age"] diccc['score']=L[i]["score"] names3.append(diccc) print names0 print names1 print scoreSum print names3 print readFiles()