Python函数练习

基础练习

练习目标

函数

01.计算车费

题目描述

小红打车,起步价8元(3公里), 每公里收费 2 元,她打车行驶了 n 公里,通过函数封装并计算车费

输入描述

输入一个公里数

输出描述

输出应付车费

示例

输入:

5

输出:

12

try:
    def taxi(n:float):
        if n<=3:
            return 8
        else:
            return (n-3)*2+8
    n=float(input("请输入公里数:"))
    print("支付金额为:",taxi(n))
except:
    print("输入错误,请重新输入!")

02.整数叠加

题目描述

读取一个0到1000之间的整数,并计算它各位数字之和

输入输出描述

输入一个[0,1000]之间的整数

输出该数字的各位数字之和

提示

需要使用内置函数 len() 或者 for循环

示例1

输入:

999

输出:

27

解释:

999各位数之和为9 + 9 + 9 = 27

try:
    def superimposing(n:int):
        sum=0
        #整型不能直接转换成列表,list可将字符串转换成列表
        n=str(n)
        n_list=list(n)
        for i in range(len(n_list)) :
            #一定是n_list[i],方括号
          sum+=int(n_list[i])
        return sum
    n=int(input("请输入数字(1~1000):"))
    print("数字叠加为:",superimposing(n))
except:
    print("输入错误,请重新输入!")
​

03.时间拆分

题目描述

输入分钟数,然后将该分钟数转换为年数和天数,假定一年有365天

输入描述

输入一个分钟数

输出描述

输出两行,第一行为年数,第二行为天数

示例

输入:

1000000000

输出:

1902

214

try:
    def years(n:float):
        return (n/60/24/365)
    def days(n:float):
        return (n/60/24)
    n=float(input("输入分钟数:"))
    print("年数为:%.0f" % years(n))
    print("天数为:%.0f" % days(n))
except:
    print("输入错误,请重新输入!")

04.回文素数

题目描述

回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数

输出显示前100个回文素数,每行显示10个

示例

2 3 5 7 11 101 131 151 181 191

import math
from itertools import count
​
​
def prime(n:int):
    for i in range(2,int(math.sqrt(n)+1)):
        if (n%i==0):
            return False
    return True
def Palindrome(n:int):
    n=str(n)
    lenth=len(n)
    for i in range(lenth//2):
        if (n[i]!=n[lenth-1-i]):
                return False
    return True
count=0
for i in range(2,100000):
    if prime(i) and Palindrome(i):
        print(str(i)+" ",end="")
        count+=1
        if(count%10==0):
            print()
        if(count>=100):
            break
​
​
​

05.反素数

题目描述

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数

输出显示前100个反素数,每行显示10个

import math
​
def prime(n:int):
    for i in range(2,int(math.sqrt(n)+1)):
        if (n%i==0):
            return False
    return True
def Palindrome(n:int):
    n=str(n)
    lenth=len(n)
    for i in range(lenth//2):
        if (n[i]!=n[lenth-1-i]):
                return False
    return True
count=0
for i in range(1,100000):
    if prime(i) and not Palindrome(i):
        print(str(i)+" ", end='')
        count+=1
        if(count%10==0):
            print()
    if count>=100:
        break
​

06.双素数

题目描述

双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数

输出显示小于1000的双素数

import math
​
def prime(n:int):
    for i in range(2,int(math.sqrt(n))+1):
        if (n%i==0):
            return False
    return True
for i in range(2,1000):
    if prime(i) and prime(i+2):
        print(str(i)+" "+str(i+2))
​

07.梅森素数

如果一个素数可以写成$2^p-1$的形式,其中p是某个正整数,那么这个素数就称作梅森素数

输出p≤31的所有梅森素数

import math
def prime(n:int):
    if n<=1:
        return False
    for i in range(2,int(math.sqrt(n))+1):
        if (n%i==0):
            return False
    return True
for p in range(1,32):
    #中间变量x
    x=2**p-1
    if prime(x):
        print(x)

08.堆叠相加

题目描述

现有堆叠相加模式$a+aa+aaa+aaaa+aaaaa+......$

例如:$2+22+222+2222+22222$,其中a为2,且有5组数字

输入输出描述

输入两个数据分别为数字a和组数n

输出按照堆叠相加模式算出的和

示例

输入:

3 4

输出:

3702

解释:

3 + 33 + 333 + 3333 = 3702

def Stacked_addition(a:int,n:int):
    sum=0
    y=0
    for i in range(1,n+1):
        #中间变量x,y
        x=10**(i-1)*a
        y+=x
        sum+=y
    return sum
a=int(input("输入数字a:"))
n=int(input("输入组数n:"))
print(Stacked_addition(a,n))

09.检测密码

题目描述

一些网站会给密码强加一些规则:

(1)密码必须至少有8个字符

(2)密码只能包含英文字母和数字

(3)密码应该至少包含两个数字

(4)密码应该至少包含两个大写字母

如果密码符合规则,输出Yes;否则输出No

输入输出描述

输入一串密码

输出该密码是否符合规则

示例1

输入:

123456ab

输出:

No

示例2

输入:

123abcABC

输出:

Yes

def code(n:str):
    capital = 0
    digital = 0
    for i in range(len(n)):
        x = ord(n[i])
        if(48>x or 57122):
            return False
        if(65<=x<=90):
            capital+=1
        if(48<=x<=57):
            digital+=1
    if i<7:
        return False
    if capital<2:
        return False
    if digital<2:
        return False
    return True
​
password=input(str("请输入密码:"))
if code(password):
    print("yes")
else:
    print("no")
​
​

10.指定等级

题目描述

读入学生成绩,获取最高分best,然后根据下面的规则赋等级值:

(1)如果分数≥best-10,等级为A

(2)如果分数≥best-20,等级为B

(3)如果分数≥best-30,等级为C

(4)如果分数≥best-40,等级为D

(5)其他情况,等级为F

输入输出描述

输入两行,第一行输入学生人数n,第二行输入n个学生的成绩

输入n行,表示每个学生的成绩等级

示例

输入:

4

40 55 70 58

输出:

学生0分数为40,等级为C

学生1分数为55,等级为B

学生2分数为70,等级为A

学生3分数为58,等级为B

def grade(n:int,list:list):
    #处理所有学生的成绩并返回
    best=max(list)
    #.append 在模块的末尾增加数据,先声明一个空列表
    results=[]
    for i in range(len(list)):
        if list[i]>=(best - 10):
            results.append("学生"+str(i)+"的分数为"+str(list[i])+",等级为A")
        elif (best-20)<=list[i]<(best-10):
            results.append("学生" + str(i) + "的分数为" + str(list[i]) + ",等级为B")
        elif (best-30)<=list[i]<(best-20):
            results.append("学生" + str(i) + "的分数为" + str(list[i]) + ",等级为C")
        elif (best-40)<=list[i]<(best-30):
            results.append("学生" + str(i) + "的分数为" + str(list[i]) + ",等级为D")
        else:
            results.append("学生" + str(i) + "的分数为" + str(list[i]) + ",等级为F")
    return results
n=int(input("输入学生人数:"))
list=list(map(int,input("请输入学生成绩:").split()))
print(grade(n,list))
​

拓展作业

w01. 斐波那契数列

题目描述

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

输入描述

输入一个整数n

输出描述

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

示例

输入:1

输出:1


输入:3

输出:2


输入:8

输出:21

import math
def Porfinacci(n:int):
    if n>0:
        return (1/math.sqrt(5))*(((1+math.sqrt(5))/2)**n-((1-math.sqrt(5))/2)**n)
n=int(input("请输入数据:"))
print("%.0f" %Porfinacci(n))
​
​

w02. 密码等级校验

题目描述

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

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

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

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

输入描述

用户输入一个字符串密码

输出描述

输出密码强度等级

示例

输入:abcdef

输出:弱密码


输入:abc123

输出:中等强度


输入:Abc123%

输出:强密码

import string
​
​
def code_strength(code: str):
    # 检查密码中是否包含数字
    has_digit = any(char.isdigit() for char in code)
    # 检查密码中是否包含大写字母
    has_upper = any(char.isupper() for char in code)
    # 检查密码中是否包含小写字母
    has_lower = any(char.islower() for char in code)
    # 检查密码中是否包含特殊符号
    has_special = any(char in string.punctuation for char in code)
​
    # 根据条件判断密码强度
    if has_digit and has_upper and has_lower and has_special:
        return "强密码"
    elif (has_digit and has_upper) or (has_digit and has_lower) or (has_upper and has_lower):
        return "中等强度"
    elif has_lower or has_upper or has_digit:  # 这里不需要 has_special,因为密码至少包含字母或数字
        return "弱密码"
    else:
        return "未知强度"
​
​
# 用户输入密码
code = input("请输入密码:")
# 输出密码强度
print(code_strength(code))

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

def encryption(passwd:str,n:int):
    en=""
    for i in str(passwd):
        #x _x为中间变量
        x=ord(i)
        x=x+n
        if x>126:
            x=x%126+33
        _x=chr(x)
        en+=_x
    return en
passwd=input("请输入明文数据:")
n=int(input("移动位数为:"))
print("加密后为:",encryption(passwd,n))

你可能感兴趣的:(python,算法,开发语言)