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

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

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

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

干货,还有另一个名字“枯燥”。所以只有那些能吃的起寂寞的人才能当程序员,Python也是如此,甚至生活中的任何事情都一样!所以还请做好心理准备。能耐得住这篇Python干货的朋友,一定能看到文末的更多资源。

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

排序

某大厂面试题

# 列表 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 + '\n'

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

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


分享到:


相關文章: