高级函数

字符串的应用

随机生成验证码:

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))  #随机在所有大小写字母和数字里生成4个字符

print([gen_code(len=6) for i in range(100)])
print({gen_code(len=6) for j in range(100)}  ##对上面产生的结果进行去重操作,产生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'
    table = str.maketrans(string.ascii_letters, lower+upper)
    # 根据转换表去转换对应的字符
    return text.translate(table)

def check(text):
    """
    思路:
        测试文本中是否存在至少两个最常见的英文单词, 如果有, 则代表破解成功.
    """
    mostCommonWords = ('the', 'is', 'to', 'not', 'have', 'than', 'for', 'ok', 'and' )
    return  len([1 for word in mostCommonWords  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 have a than than have is to to have ok ok ok  '
cryptStr = kaisacrypt(text=text, k=18)
print(cryptStr)

bruteForce(cryptStr)

结果:
这里写图片描述

内置高阶函数

1.map 函数
print(list(map(abs, [-1, 3, -4, -5])))
结果:
这里写图片描述
2. reduce 函数

def multi(x, y):
    return x * y

# [1,2,3]  ====> multi(multi(1,2), 3)
print(reduce(multi, range(1, 4)))

结果:这里写图片描述
3.filter 函数

 拿出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))))

结果:这里写图片描述

sorted函数

li.sort()和sorted()两种方法的区别?
1). 列表里面提供了sort方法, 其他数据结构没有.sorted方法可以对任何可迭代对象排序.
2).sort方法支持原地排序(变量排序后, 变量本身改变), sorted排序后返回一个新的列表,并不改变原变量的内容
默认sort和sorted方法由小到大进行排序, reverse=True时, 由大到小进行排序.

li = [1,2,6,67,2,23]
print(sorted(li, reverse=True))

结果:
这里写图片描述

对于列表里面的嵌套排序

info = [
    # 商品名称  商品数量 商品价格
    ('apple3', 200, 32),
    ('apple4', 40, 12),
    ('apple1', 40, 2),
    ('apple2', 1000, 24),

]
def sorted_by_count(x):  # x =  ('apple3', 200, 32)
    return x[1]

def sorted_by_price(x):  # x =  ('apple3', 200, 32)
    return x[2]

def sorted_by_price(x):  # x =  ('apple3', 200, 32)
    return x[2]
# 按照商品的数量进行排序, key代表排序的关键字
print(sorted(info, key=sorted_by_count))
print(sorted(info, key=sorted_by_price))
print(sorted(info,key=sorted_by_count_price))

结果:
这里写图片描述
对字典里面的嵌套进行排序

d = {
    '003':{
        'name':'apple1',
        'count':100,
        'price':10
    },
    '002': {
        'name': 'apple1',
        'count': 200,
        'price': 2
    },
}
print(d.items())   # [(id, {}), (), ()]


# x: ('003', {'name': 'apple1', 'count': 100, 'price': 10})
print(sorted(d.items(), key=lambda x: x[1]['count']))
print(sorted(d.items(), key=lambda x: x[1]['price']))


# x:  {'name': 'apple1', 'count': 100, 'price': 10}
print(sorted(d.values(), key=lambda x: x['count']))
print(sorted(d.values(), key=lambda x: x['price']))


from operator import  itemgetter
print(sorted(d.values(), key=itemgetter('count')))
print(sorted(d.values(), key=itemgetter('price')))
print(sorted(d.values(), key=itemgetter('price', 'count')))
匿名函数

匿名函数定义规则:lambda 形参:返回值

from functools import reduce
print(reduce(lambda x,y : x +y , [1,2,3,4,5]))

结果:这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值