字符串替换
要求
编写一个函数,可以替换字符串内的一个或几个字串。
strreplace(str,oldString,newString)
解答
思路
1.查找
2.切片
3.重装
4.循环至结束
代码
#coding=utf-8
def strreplace(str,oldString,newString):
#方法一
while True :
position = str.find(oldString)
if position == -1:
return str
str = str[:position] + newString +str[position+len(oldString):]
pstr = "Hello word and worldssp, and world"
a = strreplace(pstr,"world","Tom")
print a
小结
由于return的新字符串和旧字符串起不同的名字,结果在循环时由于各种考虑不周,导致各种死循环,修改后代码拖沓,最后还是取消了新字符串名。
方法二
def strreplace(str,oldString,newString):
ns = str.split(oldString)
return newString.join(ns)
真厉害,我学习的时候还在想join函数有啥用
整理list
要求
将list里的元素[1,2,3,4,5,6,7,8…..100]变成[[1,2,3],[4,5,6],[7,8,9]…..]
解答
思路
1.生成一个新列表
2.取3个数存入新列表
3.将新列表存入新新列表
4.循环
代码
def function(l):
i=0
nl=[]
nnl=[]
for item in l:
nl.append(item)
i+=1
if i == 3:
nnl.append(nl)
i=0
nl=[]
nnl.append(nl)
return nnl
l = [x for x in range(1,101)]
newl=function(l)
print newl
小结
nl,nnl还要先赋个框,不然不允许使用append
看起来好长啊
方法二
def function(l):
return [l[i:i+3] for i in range(0,len(l),3)]
???
???
???
发生什么了?
输出什么
阅读以下代码,写出输出
def elist(val,list=[]):
list.append(val)
return list
list1 = elist(10)
list2 = elist(123,['a','b','c'])
list3 = elist('a')
print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3
思路
这个我在错误集锦里看过类似的
解答
list1 = [10]
list2 = [a,b,c,123]
list3 = [10,'a']
应该是这样的,这就是在参数中使用可变类型的后果
答案
list1 = [10, 'a']
list2 = ['a', 'b', 'c', 123]
list3 = [10, 'a']
小结
我的心好痛,忽略了,这不是错误集锦中的一个,而是二合一,list1和3指向同一块地址,3刷新,1也跟着变。
生成随机数
要求
写一个函数,给定参数n,生成含有n个元素值为1~n的数组,元素顺序随机,但值不重复。
解答
思路
random函数不太记得怎么用了
1.生成一个随机数
2.根据是否重复,添加进列表
3.满了,结束
代码
import random
def newrandom(n):
l=[]
while True:
ra=random.randint(1,n)
if not ra in l:
l.append(ra)
if len(l) == n :
return l
n=10
nl=newrandom(n)
print nl
小结
这回总不能用列表生成式了吧
答案
似乎把判断长度放到上面好一些?
可是放上面会多一次判断啊
查找文件
要求
遍历目录及子目录,抓取带有指定字符串的文件
解答
思路
这个我写过的,还和重命名结合到了一起,虽然以及忘了要调用os里的哪些东西了
1.获取当前目录下的全部文件及文件夹
2.检测
3.对全部文件进行递归操作
代码
#coding=utf-8
import os
def findFile(ls,str):
for wenjian in os.listdir(ls):
if str in wenjian:
print ls +wenjian
if os.path.isdir(ls+wenjian):
findFile(ls + wenjian + '/',str)
fi="/home/sky/Desktop/lianxi/"
find="a"
findFile(fi,find)
小结
最开始由于没有判断是否是个文件夹所以导致报错。所以最初只能达成本目录下的搜索。
以前写的
#coding=utf-8
import os
import os.path
def s(rootdir,oldId,newId):
#三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
for parent, dirnames, filenames in os.walk(rootdir):
for filename in filenames:
if filename.find(oldId)!=-1:
newName = filename.replace(oldId, newId)
print filename + "---->" + newName
os.rename(os.path.join(parent, filename), os.path.join(parent, newName))
print os.path.join(parent,newName)
s('/home/sky/Desktop/lianxi', 'da','asd')
虽然使用了walk函数使其不用递归。但是感觉还是递归短啊。
实际应用了一次,递归的因为没有文件夹打开权限翻车了