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...