python 演算法 小試牛刀

2021-09-12 10:39:44 字數 3230 閱讀 4379

1.列印從1到100,碰到3倍數用fizz代替,碰到5倍數,用buzz代替,3和5的倍數,fizzbuzz代替

def func():

for i in range(1,101):

if i % 3 == 0 & i % 5 == 0

print("fizzbuzz")

elif i % 3 == 0:

print("fizz")

elif i % 5 == 0:

print("buzz")

else:

print(i)

func()

2. 順序(搜尋)演算法

順序搜尋是乙個簡單的搜尋演算法。搜尋牌堆中的一張特定牌,有就停止;沒有,搜尋完也停止

def funz(number_list,n):

found = false

for i in number_list:

if i == n:

found = true

break

return found

'''#以數字為例

numbers = range(0,100)

ss = funz(numbers,3)

print(ss)

sss = funz(numbers,201)

print(sss)

'''

3. 回文詞(palindrome)

逆序和正序寫出的單詞是相同的詞,大小寫視為同乙個單詞。如何判斷是否為回文詞:

def palindrome(word):

word = word.lower()

return word[::-1] == word

print(palindrome("morde"))

print(palindrome("mom"))

[::-1]是python中逆序返回可迭代物件的切片的語法。

4.變位詞(anagram)

通過重組另乙個單詞的字母組成的單詞。iceman 是cinema的乙個變位詞。如何判斷是否為變位詞:

def funa(word1,word2):

w1 = word1.lower()

w2 = word2.lower()

return sorted(w1) == sorted(w2)

print(funa("iceman","cinema"))

print(funa("lead","wolf")

避免大小寫影響演算法結果,對單詞使用lower方法。判斷單詞是否一樣,只需要進行排序,排序後的結果相同,則返回true,否則返回false。(sorted方法會返回乙個以字母順序排序的結果。)

5.計算字母頻數

判斷單詞中每個字母出現的次數:

def funv(string):

dict = {}

for c in string:

if c in dict:

dict[c] += 1

else:

dict[c] = 1

print(dict)

'''#為了更直觀的了解**,可以用下面的**

def funv(string):

dict = {}

for c in string:

if c in dict:

dict[c] += 1

print(dict)

else:

dict[c] = 1

print("&&&&&&&")

print(dict)

print(funv("sftinigddd"))

'''

遍歷引數string的每個字母,如果字母存在字典dict中,將對應的值遞增1;不在的話,新增到字典dict中,並將對應值置為1.for迴圈結束後,dict將包含字串每個字母的鍵值對。每個鍵的值就是字串中該字母所出現的次數。

6.遞迴

recursion是將問題不斷切分成更小的問題。直到小問題可以輕鬆解決的一種方法。

迭代式演算法:使用迴圈不斷重複乙個步驟來解決問題。

遞迴式演算法:通過呼叫自身函式來實現。

任何可以迭代式解決的問題,都可以遞迴式地解決。

遞迴演算法,必須要有乙個終止條件(base case),每次呼叫自己的時候,會離終止條件越來越近。最終滿足終止條件,此時問題得到解決,函式停止呼叫自己。故三個條件:a.遞迴演算法必須有終止條件;b.遞迴演算法必須改變自己的狀態,不斷靠近終止條件;c.遞迴演算法必須遞迴地不斷呼叫自己。

def bottles(bob):

"""prints 99 bottle

of beer on the

wall lyrics.

:param bob:must

be a positive

integer.

"""if bob < 1:

print("""no more

bottles

of beer

on the wall.

more

bottles of

beer.""")

return

tmp = bob

bob -= 1

print("""{} bottles of

beer on the

wall. {} bottles

of beer. take one

down, pass it

around, {} bottles

of beer on the

wall.

""".format(tmp,

tmp,

bob))

bottles(bob)

(a)  遞迴的第乙個原則通過如下終止條件滿足:

if bob < 1:

print("""no more

bottles

of beer

on the wall.

more

bottles of

beer.""")

return 

(b)  bob -= 1 滿足了遞迴的第二個原則,因為遞減變數bob 的值將使其不斷接近終止條件。變數bob 的值小於1 時,滿足終止條件,函式每呼叫一次自身,就離終止條件更近一步。

(c)  遞迴的最後乙個原則也滿足了:

bottles(bob)

python小試牛刀 K best演算法

k best解決的問題 n個珠寶價值vi和重量wi 求保留k個珠寶的單位價值最大化 n,vi,wi 值域。def k best v ls,w ls,k l,r 0.0,1e5 maximun 10,0000 while abs r l 1e 6 mid l r 2.0 vw ls v mid w f...

Python小試牛刀 迴圈

斐波那契數列,數列前兩項為1,之後每一項都是前兩項之和。usr bin env python3 a,b 0,1 while b 100 print b a,b b,a b預設print輸出結果後會自動換行,如果不希望換行,只做間隔的話,就通過另乙個引數end來替換這個換行符 print a,end ...

boost graph lib 小試牛刀

最近要做社會網路的社群發現,發現用bgl能減少不少 量。經過一番調研發現bgl封裝的很牛叉,dijkstra等演算法統統具備,奈何自己對泛型程式設計不太熟,遇到問題還是很糾結。primer泛型程式設計 演算法部分和stl原始碼分析接下來有時間一定要讀下。下面僅以鄰接鍊錶和自定義節點為例 typede...