Python入门7

随机生成验证码

import random
import string
code_str = string.ascii_letters + string.digits
print(code_str)
def gen_code(len=4):
    # code = ''
    # 字母或者数字组
    # for i in range(len):
    #     new_s = random.choice(code_str)   # 'a'
    #     code += new_s
    return "".join(random.sample(code_str, len))
print([gen_code(len=6) for i in range(100)])
print({gen_code(len=6) for j in range(100)})

这里写图片描述
恺撒加密与暴力破解

import string
def kaisacrypt(text='hello', k=3):
    # 对原有小写字母向右移动k位
    lower = string.ascii_lowercase[k:] + string.ascii_lowercase[:k]
    upper = string.ascii_uppercase[k:] + string.ascii_uppercase[:k]
    # 用于创建字符串映射的转换表'hello'
    d = str.maketrans(string.ascii_letters, lower+upper)
    # 根据转换表去转换对应的字符
    return text.translate(d)
    cryptstr=kaisacrypt( )
    print(cryptstr)
    def check(text):
    #是否出现最常见的单词
    commonwords = ('the', 'is', 'to', 'not', 'have', 'than', 'for', 'ok', 'and' )
    return  len([1 for word in commonwords  if word in text])>2
    #暴力破解
def bruteforce(text):
    for i in range(26):
        # 1,2,3,4,5
        t = kaisacrypt(text, -i)
        if check(t):
            print(i)
            print(t)
            break
 text ='If not to the sun for smiling, warm is still in the sun there'
 cryptstr = kaisacrypt(text=text, k=18)
print(cryptstr)
bruteforce(cryptstr)

这里写图片描述

import random
import time
def consumer(name):
    """消费者"""
    print("%s准备买包子......." %(name))
    while True:
        kind  = yield
        print("%s购买%s包子成功..." %(name, kind))
        c=consumer('粉条‘)
        next(c)
        c.send('三鲜‘)
def producer(name):
    c1 = consumer("用户1")
    c2 = consumer("用户2")
    next(c1)
    next(c2)
    print("%s厨师正在生产包子.......")
    kinds = ['A', 'B', 'C', 'D']
    while True:
        # 模拟生产数据耗费的时间
        time.sleep(random.random())
        kind = random.choice(kinds)
        print("%s已经生产好%s包子了..." %(name, kind))
        c1.send(kind)
        c2.send(kind)
producer("fentiao")

高阶函数

 定义函数
def fun(a, b):
    # xxxxxxx
    return a + b
调用函数
fun(1,2)
高阶函数:
              实参是一个函数名
              函数的返回值是一个函数
函数本身也可以赋值给变量
print(abs(-10))
f = abs
print(f(-10))

传递的参数包含函数名
def fun(x,y, f):
    return f(x), f(y)
print(fun(-10, 34, abs))

内置高阶函数

1). 对于序列每个元素求绝对值;
import random
from functools import reduce
print(list(map(abs, [-1, 3, -4, -5])))

2). 对于序列每个元素求阶乘; 5!
def factoria(x):
    """对于x求阶乘"""
    res = 1
    for i in range(1, x + 1):
        res = res * i
    return res
li = [random.randint(2, 7) for i in range(10)]
print(list(map(factoria, li)))

 reduce:
         - PYTHON2中, 为内置函数;
         - PYTHON3中, 导入reduce, from functools import  reduce

10!的阶乘
def multi(x, y):
    return x * y
 [1,2,3]  ====> multi(multi(1,2), 3)
print(reduce(multi, range(1, 4)))

 filter函数  ====== [i for i in range(1,11) if isodd(i)]
 def idodd(x):
     return x % 2 == 0
 if x%2 == 0:
     return  True
 else:
     return  False
print(list(filter(idodd, range(1,11))))

拿出1100之间所有的素数
def isPrime(num):
    for i in range(2, num):
        if num % i == 0:
            return  False
    else:
            return True
print(list(filter(isPrime, range(2,101))))

li.sort( )和sorted( )两种方法的区别?
1). 列表里面提供了sort方法, 其他数据结构没有.sorted方法可以对任何可迭代对象排序.
2).sort方法支持原地排序(变量排序后, 变量本身改变), sorted排序后返回一个新的列表,并不改变原变量的内容.
奇偶排序
这里写图片描述
匿名函数定义规则: lambda 形参:返回值

info = [
    # 商品名称  商品数量 商品价格
    ('apple3', 200, 32),
    ('apple4', 40, 12),
    ('apple1', 40, 2),
    ('apple2', 1000, 23),
]
rom operator import itemgetter
print(sorted(info))
按照商品的数量进行排序, key代表排序的关键字
print(sorted(info, key=itemgetter(1)))
按照商品的价格进行排序, key代表排序的关键字
print(sorted(info, key=itemgetter(2)))
print(sorted(info, key=itemgetter(1,2)))
print(sorted(info, key=itemgetter(1,2)))

add = lambda x,y : x +y
print(add(1,2))

猜你喜欢

转载自blog.csdn.net/qq_42725815/article/details/81808242
今日推荐