欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python高级算法,加密、解密程序,考题分析,请收下这份干货

程序员文章站 2022-03-07 16:53:19
网络上Python资源那么多,能称的上干货的有多少?特别是在博文方面,能称之为干货的也只有零基础的了,而我这次要分享的是进阶层次的一些Python内容。 干货,还有另一个名字“枯燥”。所以只有那些能吃的起寂寞的人才能当程序员,Python也是如此,甚至生活中的任何事情都一样!所以还请做好心理准备。能 ......
Python高级算法,加密、解密程序,考题分析,请收下这份干货

 

网络上Python资源那么多,能称的上干货的有多少?特别是在博文方面,能称之为干货的也只有零基础的了,而我这次要分享的是进阶层次的一些Python内容。

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())