哗啦啦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)

#正则分组:#去已经提取到的数据中再提取数据
 
原文地址:https://www.cnblogs.com/hualala/p/5575974.html