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高級算法,加密、解密程序,考題分析,請收下這份乾貨!


分享到:


相關文章: