Python高级算法,加密、解密程序,考题分析,请收下这份干货
网络上Python资源那么多,能称的上干货的有多少?特别是在博文方面,能称之为干货的也只有零基础的了,而我这次要分享的是进阶层次的一些Python内容。
干货,还有另一个名字“枯燥”。所以只有那些能吃的起寂寞的人才能当程序员,Python也是如此,甚至生活中的任何事情都一样!所以还请做好心理准备。能耐得住这篇Python干货的朋友,一定成功。
头条文章编辑器是不能够有缩进的,所以你们看到我写的Python代码也是没缩进的,除非用图片代替,但是我觉得那样没意思。而且一个缩进都看不懂,这篇Python博文估计也看不懂了!也可以复制到Python编译器pycharm中自动排列代码。
排序
某大厂面试题
# 列表 l 如下,里面每个元素都是一个元组
# 根据每个元组里第二个元素的大小将 l 排序
# l = [(0, 0, 0, 0), (1, 2, 4, 6), (2, 3, 3, 3), (1, 9, 8, 8)]
# 预告,是可以用一行代码解决的
l = [(1, 9, 8, 8), (1, 2, 4, 6), (2, 3, 3, 3), (0, 0, 0, 0)]
冒泡排序
# 先取列表中第一个数,和它后面的五个数比较
# 直到比出最小的数的下标,然后与第一个数替换
# 再取列表中第二个数,和它后面的四个数比较
# 直到比出最小的数的下标,然后替换到第二个数的位置
# 以此类推,直到替换完所有的数
# 0 1 2 3 4 5
l2 = [1, 6, 4, 9, 7, 3]
def index_of_min(array, offset):
index = offset
for i in range(offset, len(array)):
e = array[i]
if array[index] > e:
index = i
return index
def diy_sort(array):
l = array
for i in range(len(l)):
# 求出后面最小数的下标
index = index_of_min(l, i)
l[i], l[index] = l[index], l[i]
diy_sort(l2)
print(l2)
使用上面的算法解决问题
def index_of_min(array, offset):
index = offset
for i in range(offset, len(array)):
e = array[i][1]
if array[index][1] > e:
index = i
return index
def diy_sort(array):
l = array
for i in range(len(l)):
index = index_of_min(l, i)
l[i], l[index] = l[index], l[i]
diy_sort(l)
print(l)
lambda 匿名函数
# 关键字 lambda 用来创建匿名函数
# 匿名函数没有函数名,不能包含 控制结构 也没有 return
# 返回的值仅仅是表达式计算后得到的值
# 使用 lambda 可以省下函数定义的过程,使代码更加精简
# 适用于只需要使用一两次的函数
fun = lambda n: n * n
print('lambda 函数', fun(3))
# python 自带的排序 sort 和 sorted
# 一行解决问题
print(sorted(l, key=lambda x: x[1]))
vip 基础班作业题
# 接受一个序列,对这个序列进行逆序排列
# 序列是 字符串 列表 元组 等
# 'abc' >>> 'cba'
# ['a', 'b', 'c'] >>> ['c', 'b', 'a']
# (1, 2, 3) >>> (3, 2, 1)
def reverse_seq(seq):
l = list(seq)
l.sort(reverse=True)
if type(seq) == str:
s = ''.join(l)
return s
else:
return type(seq)(l)
seq = ('a', 'b', 'c')
print(reverse_seq(seq))
vip 基础班测试题
# 接受一个序列,判断这个序列的顺序是升序、降序还是无序
# 升序返回 'up',降序返回 'down',无序返回 None
# 序列是 字符串 列表 元组 等
def sort_method(seq):
if sorted(seq) == list(seq):
return 'up'
elif sorted(seq, reverse=True) == list(seq):
return 'down'
else:
return None
seq = '.123abc'
print(sort_method(seq))
恺撒加密
# 恺撒密码是一种最简单且最广为人知的加密技术,它是一种替换加密的技术
# 明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文
# 比如当偏移量是 3 的时候,所有的字母 A 将被替换成 D , B 变成 E ,以此类推
letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
加密
def encode(s, shift):
result = ''
for i in s:
index = letter.find(i)
if index == -1:
result += i
else:
new_index = (index + shift) % 26
result += letter[new_index]
return result
解密
def decode(s, shift):
result = ''
for i in s:
index = letter.find(i)
if index == -1:
result += i
else:
new_index = (index + 26 - shift) % 26
result += letter[new_index]
return result
ss = 'MYDJUH YI SECYDW'
在不知道位移的情况下,手动解密
def caesar_cipher(s):
result = ''
for i in range(26):
s = decode(s, i)
result = result + s + ' '
return result
print(caesar_cipher(ss))
斐波那契数列
# 指的是这样一个数列:1、1、2、3、5、8、13、21、34、…
def fib_list(n):
numbers = [1, 1]
for i in range(n):
if i > 1:
num = numbers[i - 2] + numbers[i - 1]
numbers.append(num)
return numbers
print('斐波那契数列', fib_list(30))
质数
# 指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数
def prime_number(n):
l = []
for i in range(2, n):
m = 0
for j in range(2, i):
if i % j == 0:
m = 1
if m == 0:
l.append(i)
return l
print('质数', prime_number(100))
水仙花数
# 水仙花数是指一个 n 位正整数(三位以上),它的每个位上的数字的 n 次幂之和等于它本身
# 例如:1 ** 3 + 5 ** 3+ 3 ** 3 = 153
# 注: ** 是幂的运算符, 1 ** 3 是 1 的 3 次幂
# 注: // 是整除
# 三位的水仙花数共有 4 个:153 370 371 407
# 要求:用代码求出三位数的 4 个水仙花数
def numbers():
l = []
for n in range(100, 1000):
i = n // 100
j = n // 10 % 10
k = n % 10
m = i ** 3 + j ** 3 + k ** 3
if n == m:
l.append(n)
return l
print('水仙花数', numbers())
。
上一篇: 详解50行代码,Node爬虫练手项目
下一篇: Koa从零搭建到Api实现项目的搭建方法