zoukankan      html  css  js  c++  java
  • 哗啦啦Python之路

    1. 三种排序方式

    - 冒泡排序:两两比较,大的排右边,每次冒出去一个泡

    m = [1,2,6,5,4]
    
    for i in range(len(m)):
        for j in range(i):
            if m[j] > m[j+1]:
                m[j],m[j+1] = m[j+1],m[j]
    
    print(m)

    - 选择排序

    对于一组关键字{K1,K2,…,Kn}, 首先从K1,K2,…,Kn中选择最小值,假如它是 Kz,则将Kz与 K1对换;
    然后从K2,K3,… ,Kn中选择最小值 Kz,再将Kz与K2对换。
    如此进行选择和调换n-2趟,第(n-1)趟,从Kn-1、Kn中选择最小值 Kz将Kz与Kn-1对换,最后剩下的就是该序列中的最大值,
    一个由小到大的有序序列就这样形成。

    m = [1,4,6,2,5]
    
    for i in range(len(m)):
        min = i
        for j in range(i,len(m)):
            if m[min]> m[j]:
                min = j
        m[i],m[min] = m[min],m[i]
    
    print(m)

    - 插入排序

    一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
    1.从第一个元素开始,该元素可以认为已经被排序
    2.取出下一个元素,在已经排序的元素序列中从后向前扫描
    3.如果该元素(已排序)大于新元素,将该元素移到下一位置
    4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    5.将新元素插入到该位置后

    m = [1,4,6,2,5]
    for i in range(1,len(m)):
        save = m[i]
        j = i
        while j>0 and m[j-1]>save:
            m[j] = m[j-1]
            j-=1
        m[j] = save
    print(m)

    - 附:取一组随机数的方法

    #http://blog.csdn.net/hinyunsin/article/details/6311707
    import random
    def getrandata(num):
        a = []
        i = 0
        while i <num:
            a.append(random.randint(0,1000000))
            i +=1
        return a
    
    n = getrandata(5)
    print(n)

    2. 递归

    #1*2*3*4*5*6*7
    
    def func(num):
        if num == 1:
            return 1
        return num * func(num-1)
    
    x = func(7)
    print(x)
    print(1*2*3*4*5*6*7)

    3. 反射

    反射是基于字符串的形式去模块中操作其成员,主要就是attr系列。它的目的是简化代码,直接根据input的内容去模块里面找函数

    import loginouthome #自己建的一个模块
    
    def run():
        inp = input("请输入要访问的url:")
        #利用字符串的形式去模块中操作成员
        #loginouthome.inp() 这种是不行的哦
        if hasattr(loginouthome,inp): #查看该模块是否有该成员
            func = getattr(loginouthome,inp) #获取成员
            func()
        else:
            print('404')
    run()
    
    
    #loginouthome.py是下面这个样子的
    #def login():
    #     print("登录页面")
    # 
    # def logout():
    #     print("登录2页面")
    # 
    # 
    # print("登录3页面")
    # def home():

     4. 模块

    1) 查看一些特殊的东西

    import s2
    
    #print(vars(s2)) #这个模块里有哪些变量
    #print(s2.__dict__)
    
    # __name__ #如果我执行s2模块,那么s2的特殊变量__name__ = __main__
    #一般主文件加上这么一个逻辑
    # __file__ #当前运行的py文件所在的路径
    # __doc__ #获取文件注释,就是函数那个三个引号引起来的部分
    # __cached__ #pyc在哪个路径,解码存放的位置
    # __package__ #表示模块在哪个目录下面

    2) os模块

    import os
    os.path.dirname() #找到某个文件的上级目录
    os.path.abspath() #获取某个文件的绝对路径
    sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

    3) sys模块

    #进度条
    import sys
    import time
    
    
    def view_bar(num, total):
        rate = num / total
        rate_num = int(rate * 100)
        r = '
    %d%%' % (rate_num, ) #如果把
    去掉,就会变成同一行打
        sys.stdout.write(r)
        sys.stdout.flush() #把输出清空
        #print(r)
    
    
    if __name__ == '__main__':
        for i in range(0, 100):
            time.sleep(0.1)
            view_bar(i, 100)

    4) hashlib模块,加密

    import hashlib #加密模块
    hash = hashlib.md5(bytes("23333")) #md5不能被解密,括号里加字节相当于自己的key,非常的保密
    hash.update(bytes("admin",encoding="utf-8"))
    print(hash.hexdigest())
    print(hash.digest())

    5) 正则表达式模块 re

    m = re.findall("alex","yualexnlagealexdsaew") #右边一堆里面找左边,普通字符匹配
    print(m)
    
    n = re.findall("al.x","yualexnlagealexdsaew") #一个,如果加个类似换行符这种就匹配不到了
    print(n)
    
    n = re.findall("^al.x","yualexnlagealexdsaew") # ^只有在起始位置才行
    print(n)
    
    n = re.findall("al.*x","yualexnlagealexdsaew") #这个位置上可以匹配0到多个字符
    print(n)
    
    n = re.findall("al.+x","yualexnlagealexdsaew") #这个位置上可以匹配1到多个字符
    print(n)
    
    n = re.findall("al.?x","yualexnlagealexdsaew") #这个位置上可以匹配0到1字符
    print(n)
    
    n = re.findall("al.{3}x","yualexnlagealexdsaew") #这个位置上可以匹配3个字符
    print(n)
    
    n = re.findall("al.{1,5}x","yualexnlagealexdsaew") #这个位置上可以匹配1到5个字符
    print(n)
    
    n = re.findall("al[a-z]x","yualexnlagealexdsaew") #这个位置上可以匹配a-z
    print(n)
    
    n = re.findall("al[^f]x","yualexnlagealexdsaew") #这个位置上可以匹配非f字符
    print(n)
    
    n = re.findall("al[d]x","yualexnlagealexdsaew") #这个位置上可以匹配任意一个数字
    print(n)
    
    
    n = re.match('com',"comwww.rruncomoodb").group()
    print(n)
    
    n = re.sub("g.t","have","I get A, I got B, I gut c")
    print(n)
    
    #正则分组:#去已经提取到的数据中再提取数据
     
  • 相关阅读:
    gulp.js基础入门
    正则匹配
    app的meta标签
    移动端UC浏览器和QQ浏览器的部分私有meta属性
    雅虎团队经验:网站页面性能优化的 34条黄金守则
    DOCTYPE声明作用及用法详解
    DOCTYPE 中xhtml 1.0和 html 4.01区别分析
    html doctype 作用介绍
    WebStorm
    JQuery的Ajax跨域请求原理概述及实例
  • 原文地址:https://www.cnblogs.com/hualala/p/5575974.html
Copyright © 2011-2022 走看看