python函数拓展练习

w01. 斐波那契数列

题目描述

斐波那契数列是一种特殊的数列,很多生活和企业场景中都能见到满足该数列的数据排列方式;现在要求你封装一个用于获取斐波那契数列数据的功能函数,用于底层数据支持;

输入描述

输入一个整数n

输出描述

输出位置为n的斐波那契数列对应的数据

示例

输入:1

输出:1


输入:3

输出:2


输入:8

输出:21

def fb(num):
  """输出斐波拉契数列的第n项"""
  list_fb = [1, 1]
  for i in range(2, num):
    list_fb.append(list_fb[i - 1] + list_fb[i - 2])
  return list_fb[num - 1]

n = int(input("输入一个整数:"))
print(fb(n))

w02. 密码等级校验

题目描述

按照用户输入密码的字符,判断用户的密码强度,基本要求如下

  • 弱:都是数字,或者都是大写字母/小写字母组成的密码

  • 中等:[数字、大写字母] 或者 [数字、小写字母] 或者 [大写字母、小写字母] 或者 [大小写字母、数字]组成的密码

  • 强:[数字、大写字母] 或者 [数字、小写字母] 或者 [大写字母、小写字母]并结合特殊符号组成的密码

输入描述

用户输入一个字符串密码

输出描述

输出密码强度等级

示例

输入:abcdef

输出:弱密码


输入:abc123

输出:中等强度


输入:Abc123%

输出:强密码

def decide_pwd(pw):
  """声明函数判断输入密码的等级"""
  #isdigit用于判断字符串中是否全为数字,isalpha判断字符串中是否全是字母
  if pw.isdigit() or pw.isalpha():
    return "弱密码"
  #isalnum判断字符串中是否由数字或字母组成
  elif pw.isalnum():
    return "中等强度密码"
  else:
    return "强密码"

password = input()
print(decide_pwd(password))

w03. 密码加密

题目描述

编写一个函数,实现密码的错位加密

编写一个函数,实现密码的错位解密

输入描述

输入一个字符串明文密码;

输入一个字符串密文数据;

输出描述

打印展示加密后的字符串密文

打印展示解密后的明文字符串

示例

输入:

abc # 明文

def # 密文

输出:

cde # 错位密文(具体错位可以自定义)

cde # 解密明文(具体错位可以自定义)

代码实现

  • 下面代码已经实现了基本功能,但是存在BUG(请找出并修正它)

  • def encrypt(password, n=4):
        """加密函数"""
        ep = ""
        for i in str(password):
            ac = ord(i)
            ac += n
            _ac = chr(ac)
            ep += _ac
        return ep

    def decrypt(password, n=4):
        """解密函数"""
        pwd = ""
        for i in str(password):
            ac = ord(i)
            ac -= n
            _ac = chr(ac)
            pwd += _ac
        return pwd

    pd = input("请输入明文数据:")
    print("加密后的数据:", encrypt(pd, 5))

    pd2 = input("请输入密文数据:")
    print("解密后的数据:", decrypt(pd2, 5))

  • """
    bug为:
    1.在加密函数里,如果错位后密码的ASCII值大于126,则无法将大于126的字符转换相应的字符
    2.在解密函数里,如果原密码的ASCII值减去要错位的值后小于32,则也无法转换为相应的字符
    """
    def encrypt(password, n=4):
        """加密函数"""
        ep = ""
        for i in str(password):
            ac = ord(i)
            ac += n
            """在原密码转换为相应的ASCII值后,增加一个判断,判断是否大于126
            若果大于126,则将其对126取模后加32,再转换即可
            因为前32是非打印区间
            """
            if ac>126:
                ac=32+ac%126
            _ac = chr(ac)
            ep += _ac
        return ep
    
    def decrypt(password, n=4):
        """解密函数"""
        pwd = ""
        for i in str(password):
            ac = ord(i)
            ac -= n
            """判断错位后的ASCII值是否小于32,若果是,则将其-32后在加上126
            后转换即可
            """
            if ac<33:
                ac=126+ac-32
            _ac = chr(ac)
            pwd += _ac
        return pwd
    
    pd = input("请输入明文数据:")
    print("加密后的数据:", encrypt(pd, 5))
    
    pd2 = input("请输入密文数据:")
    print("解密后的数据:", decrypt(pd2,5))

上一篇:【MySql】-0.1、Unbunt20.04二进制方式安装Mysql5.7和8.0


下一篇:每日读则推(十四)——Meta Movie Gen: the most advanced media foundation models to-date