python 算法 小试牛刀

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

用found记录是否找到。找到就设置为true,退出循环,并返回found变量;没有找到,就继续搜索下一张牌,如果遍历完所有的牌,返回变量found。通过found的值判断是否找到该牌。

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)

猜你喜欢

转载自blog.csdn.net/qq_21121571/article/details/88412290
今日推荐