随机生成验证码
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))))
拿出1~100之间所有的素数
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))