網絡上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())
閱讀更多 空手憶歲月 的文章