数学学习

(一) 斐波那契数列(Fibonacci)

简介

  • 起源:
    根据高德纳(Donald Ervin Knuth)的《计算机程序设计艺术》(The Art of Computer Programming),1150年印度数学家Gopala和金月在研究箱子包装物件长宽刚好为1和2的可行方法数目时,首先描述这个数列。在西方,最先研究这个数列的人是比萨的列奥那多(意大利人斐波那契Leonardo Fibonacci),他描述兔子生长的数目时用上了这数列:
    第一个月初有一对刚诞生的兔子
    第二个月之后(第三个月初)它们可以生育
    每月每对可生育的兔子会诞生下一对新兔子
    兔子永不死去
    假设在n月有兔子总共a对,n+1月总共有b对。在n+2月必定总共有a+b对:因为在n+2月的时候,前一月(n+1月)的b对兔子可以存留至第n+2月(在当月属于新诞生的兔子尚不能生育)。而新生育出的兔子对数等于所有在n月就已存在的a对

  • 思路说明:
    几乎所有的高级语言都要拿Fibonacci数列为例子,解释递归、循环等概念。这里,我要用Python来演示是简版的。

    代码实例

    def fab(max):
        n, a, b = 0, 0, 1
        lst = []
        while n < max:
            lst.append(b)
            a, b = b, a + b
            n += 1
        for k, v in enumerate(lst):
            print('排序{} Output_namber:{}'.format(k, v))
    if __name__ == '__main__':
        fab(10)
    

    为了方便展示输出结果我在打印输出的时候用了字符串的format函数输出,展示如下

    排序0 Output_namber:1
    排序1  Output_namber:1
    排序2 Output_namber:2
    排序3 Output_namber:3
    排序4 Output_namber:5
    排序5 Output_namber:8
    排序6 Output_namber:13
    排序7 Output_namber:21
    排序8 Output_namber:34
    排序9 Output_namber:55
    
  • 备注:
    enumerate会将数组或列表组成一个索引序列。使我们再获取索引和索引内容的时候更加方便如下:

      lst = ["我", "叫", "国", "佬"]
      for index, item in enumerate(lst):
          print(index, item)
    >>>
      0 我
      1 叫
      2 国
      3 佬
    

(二)回文

简介

  • 解释:
    回文,亦称回环,是正读反读都能读通的句子,亦有将文字排列成圆圈者,是一种修辞方式和文字游戏。回环运用得当,可以表现两种事物或现象相互依靠或排斥的关系。

  • 思路说明
    用Python判断一个字串是否是回文。

代码实例

 def huiwen(s):
     if len(s) <= 1:
         return True
     else:
         return s[0] == s[-1] and huiwen(s[1:-1])

if __name__=="__main__":
    ishuiwen = str(input("Check your input is or not huiwen: "))
    print(huiwen(ishuiwen))
  • 编译运行

    • Check your input is or not huiwen: 上海自来水来自海上

    • True

(三)密码强度判断

  • 解释:
    生活中经常要用到密码,所以写了个密码强度判断的程序。
  • 思路说明:
    用Python判断输入的密码强度。
    支持判断四种输入,大写英文字母,小写英文字母,数字,标点符号。
    输出等级判断:
    输入只含有四种中的一种,low.
    输入只含有四种中的两种,middlelow.
    输入只含有四种中的三种,middlehigh.
    输入只含有四种中的四种,high.

代码实例

from string import ascii_lowercase, ascii_uppercase, digits, punctuation

def Strength(password):
    PsdList = [ascii_lowercase, ascii_uppercase, digits, punctuation]
    L = [0, 0, 0, 0]
    for p in password:
        if p in PsdList[0]:
            L[0] += 1
        elif p in PsdList[1]:
            L[1] += 1
        elif p in PsdList[2]:
            L[2] += 1
        elif p in PsdList[3]:
            L[3] += 1
        else:
            pass

    count = L.count(0)
    if count == 4:
        print("InvalidPassword")
    elif count == 3:
        print("low")
    elif count == 2:
        print("middlelow")
    elif count == 1:
        print("high")
    else:
        print("middlehigh")
if __name__ == '__main__':
        MiMa = Strength("{}".format(input('请输入您的密码:')))
        print(MiMa)
  • 备注:
    这程序还不完善,还有待优化,比如输入强度最低位数设置,输入错误判断(比如输入中文显示不能输入)等。不过,一般输入最少4-8位,你可以输入4位以上的密码来判断密码强度。
Enjoy it ? Donate me ! 欣赏此文?求鼓励,求支持!
显示 Gitment 评论