python练习(一)

来源:互联网 发布:冒险岛源码 编辑:程序博客网 时间:2024/06/13 04:43

  • 字符串替换
    • 要求
    • 解答
      • 思路
      • 代码
      • 小结
      • 方法二
  • 整理list
    • 要求
    • 解答
      • 思路
      • 代码
      • 小结
      • 方法二
  • 输出什么
    • 思路
    • 解答
    • 答案
    • 小结
  • 生成随机数
    • 要求
    • 解答
      • 思路
      • 代码
      • 小结
      • 答案
  • 查找文件
    • 要求
    • 解答
      • 思路
      • 代码
      • 小结
      • 以前写的

字符串替换

要求

编写一个函数,可以替换字符串内的一个或几个字串。

strreplace(str,oldString,newString)

解答

思路

1.查找
2.切片
3.重装
4.循环至结束

代码

#coding=utf-8def  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 nnll = [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 listlist1 = elist(10)list2 = elist(123,['a','b','c'])list3 = elist('a')print "list1 = %s" % list1print "list2 = %s" % list2print "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 randomdef newrandom(n):    l=[]    while True:        ra=random.randint(1,n)        if not ra in l:            l.append(ra)        if len(l) == n :            return ln=10nl=newrandom(n)print nl

小结

这回总不能用列表生成式了吧

答案

似乎把判断长度放到上面好一些?
可是放上面会多一次判断啊

查找文件

要求

遍历目录及子目录,抓取带有指定字符串的文件

解答

思路

这个我写过的,还和重命名结合到了一起,虽然以及忘了要调用os里的哪些东西了
1.获取当前目录下的全部文件及文件夹
2.检测
3.对全部文件进行递归操作

代码

#coding=utf-8import osdef 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-8import os import os.pathdef 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函数使其不用递归。但是感觉还是递归短啊。
实际应用了一次,递归的因为没有文件夹打开权限翻车了

原创粉丝点击