Trains-04练习-函数

#基础练习

练习目标

01.计算车费

题目描述

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

输入描述

输入一个公里数

输出描述

输出应付车费

示例

输入:

5

输出:

12

#定义函数
def car_money(n):
    """计算车费"""
    # 定义常量
    first_money = 8
    one_km_money = 2
    #类型转换
    first_money = float(first_money)
    one_km_money = float(one_km_money)
    # 计算车费
    all_money = first_money + one_km_money * n
    return all_money
#输入小红行驶的公里数
n = float(input("请输入行驶的公里数"))
#输出应付的车费
print("应付车费:",car_money(n))

02.整数叠加

题目描述

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

输入输出描述

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

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

提示

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

示例1

输入:

999

输出:

27

解释:

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

'''
#方法一:
#定义函数
def add_math(x):
    """计算一个数各个位上之和"""
    x = int(x)
    if x == 1000:
        result = 1
    else:
        hundred = x // 100
        ten = x % 100 // 10
        one = x % 100 % 10
        result = hundred + ten + one
    return result
#输入要求和的数据
x = input ("请输入要求和的数:")
print("各个位上的数字之和为:",add_math(x))
'''
#方法二:
#定义函数
def add_math(date):
    """计算一个整数各个位上之和"""
    #类型转换
    date = int(date)
    date_str = str(date)
    #定义要使用的参数
    add_date = 0
    #使用for in 循环 从 date_str(字符类型)中读取 每个位上的字符
    #再将这些字符数据 转化为 整数类型 进行求和处理
    for x in date_str:
        add_date +=int(x)
    #设置返回值
    return add_date
#输入要求的整数
date = input ("请输入要求和的数:")
#输出求得的整数之和
print("计算的各个位上的数字之和为:",add_math(date))

03.时间拆分

题目描述

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

输入描述

输入一个分钟数

输出描述

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

示例

输入:

1000000000

输出:

1902

214

#定义函数
def time(minute):
    #由题目知 是先全部转化成年数 再将未满一年的 转化为天数
    #定义常量
    year = 365
    day = 24
    hour = 60
    #进行转换
    yu_year = minute // hour //day //year
    yu_day = minute // hour //day % year
    #换行输入
    print("转换年数为:",yu_year)
    print("转换天数为:",yu_day)
    return
#输入对应的参数
minute = int(input("请输入要转换的分钟数:"))
#输出函数结果
print(time(minute))

04.回文素数

题目描述

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

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

示例

2
3
5
7
11
101
131
151
181
191

 #定义筛选素数的函数(prime):
def is_prime(n):
    """用来筛选素数"""
    #因为 小于2的都没有素数 而且可以防止负数数据的输入 减少了负数进入循环占用算术空间
    if n < 2:
        return False
    #想打False 要使用大写开头
    #进行遍历
    for i in range(2,int(n**0.5 ) + 1 ):
        if n % i == 0:
            return False
    return True   #对于返回值 要看后面是否需要其返回的数据 如果只是判断是否符合条件 判断真假即可
#在使用range进行遍历时  因为 range (x,y) 取的值是[x,y)
#所以在这里的遍历中 防止 i 本身为整数时 错过循环  在int(n**0.5 ) 的后面加了一个1
#在之前筛选素数时, 使用的 都是将 n之前的数全部提出来 全部逐个进行一次取余的运算
#这里 因为 一个数字 如果有因数的话 两个因数中 一定会有一个数字是小于原数的平方根的

#palindrome 回文数
def is_palindrome(n):
    """翻转数据"""
    #引用变量 定义一个空变量 方便后续的赋值 不然既不符合逻辑  同时也会报错
    s = ""
    y = ""
    for i in str(n):
        #在对字符 n 进行遍历时先会将组成 n 的字符 逐个遍历出来
        s = i + s
        #进行拼接 因为在没写数据类型转换代码的前提下 s 默认的是字符类型 而字符加 字符 就是拼接
        y = int(s)
    if y == n:
        return y
    #将值返回出来 返回的的数据和之前的数据进行判断比较 返回符合条件的数据
#定义最后的运行函数
#前面两个函数 一个筛选素数 另外一个翻转数据 这样我们可以将以原数据和翻转数据作为判断条件来验证是否是回文数
def is_prime_palindrome():
    m = 0
    num = 1
    #开始从一开始验证数据
    while m < 100:
        #这里循环设置这样的条件是因为 我们需要的是前100个数
      if is_prime(num) and is_palindrome(num):
          #判断同时满足回文数和素数的条件
          print(num, end='\t')
          #输出符合条件的值 同时 在数据的最后放一个\t 防止换行
          m += 1
          if m % 10 ==0:
              #因为要求的是 对于输出的100个数据要按照10个一行进行输出 所以在这里对于输出数据的个数进行取余处理
              # 当结果为0 时 说明 满足 10个一行的条件了 就需要换行 这里是用的if 判断 刚好需要一个判断的结果
              #print 的最后 会默认带上一个换行字符就达到换行的目的了
              print()
      num +=1
#注意缩进 在编写代码时 尽量将同一缩进的代码先编写出来

#因为设置的函数无返回值 也没有 参数 所以直接运行函数就行了
is_prime_palindrome()

05.反素数

题目描述

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

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

#定义素数的函数
"""判断素数"""
def is_prime(n):
    if n < 2:
        return False
    elif n == 2:
        return True
    elif n > 2 :
        for i in range(2 , int( n**0.5)+1):
            if n % i ==0:
                return False
        return True
#print(is_prime(9))

# #判断回文数
def is_palindrome(n):
    s = str(n)
    y = ""
    for m in  s:
        y =m+y
    if int(y) == n and is_prime(int(y)):
            return True
    return False
#print(is_palindrome(151))

#将上面两个函数结合 并输出正确数据
def is_prime_palindrome_palindrome_prime():
    #参数 的变化 和100个数据的设定
    m = 0
    num = 1
    while m <=100:
        if is_prime(num) and is_palindrome(num):
            #当使用 and 连接时 要俩个均为真 才对
            print(num, end='\t')
            m += 1
            if m % 10 ==0:
                print()
        num += 1

is_prime_palindrome_palindrome_prime()

06.双素数

题目描述

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

输出显示小于1000的双素数

#双素数 在素数的基础上
#加上一个验证两个相邻素数 的差为2 的函数

def is_prime(n):
    """判断素数"""
    if n < 2:
        return False
    elif n == 2:
        return True
    elif n > 2 :
        for i in range(2 , int( n**0.5)+1):
            if n % i ==0:
                return False
        return True

#先写出前1000的素数
def is_two():
    """判断两个相邻素数 差值为2"""
    n = 1
    while n < 1000:
        if is_prime(n) and is_prime(n+2):
            print(n,n+2)
        n += 1

is_two()

07.梅森素数

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

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

def is_prime(n):
    """判断素数"""
    if n < 2:
        return False
    elif n == 2:
        return True
    elif n > 2 :
        for i in range(2 , int( n**0.5)+1):
            if n % i ==0:
                return False
        return True
    #写出梅林数 再在梅林数中筛选素数
p =1
while p <= 31:
    x = 2**p -1
    if is_prime(x):
        print(x)
    p += 1

08.堆叠相加

题目描述

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

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

输入输出描述

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

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

示例

输入:

3 4

输出:

3702

解释:

3 + 33 + 333 + 3333 = 3702

def add():
        x = input("请输入原数")
        y = int(input("请输入需要组数"))
        m = 1  # 计算组数的变量
        all = 0 #求和的数据
        j = x
        while m <= y:
               j = int(j)
               all = int(all)
               all += j
               j = str(j)
               j += str(x)
               m += 1
        return all

# 先拼接需要的字符 并注意字符转换 在进行相加
print(add())

09.检测密码

题目描述

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

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

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

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

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

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

输入输出描述

输入一串密码

输出该密码是否符合规则

示例1

输入:

123456ab

输出:

No

示例2

输入:

123abcABC

输出:

Yes

def number_detections(n):
     if len(n) >= 8:
         #计算 字符数的内置函数len()
         return True
     return False

def alphabet_math(n):
    #计数器
    # n = input("请输入要检测的密码")
    math = 0
    max_alphabet = 0
    min_alphabet = 0
    n = str(n)
    for i in n:
        #检查数字
        if  48 <= ord(i) <= 57:
            math +=1
            #检查大写字母
        elif  65 <= ord(i) <= 90:
            max_alphabet +=1
            #检查小写字母
        elif  97 <= ord(i) <= 122:
            min_alphabet +=1
    #判断是否符合条件
    if math > 0:
        return True
    if max_alphabet >= 2:
        return True
    if min_alphabet >= 2:
        return True
    else:
        return False

def password_verification():
     m = input("请输入要检测的密码")
     if alphabet_math(m) and number_detections(m):
         print("YES")
     else:
         print("NO")
password_verification()

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

score = []
def score_all():
    member = int(input("请输入学生人数: "))
    for m in range(member):
       score.append(int(input("请输入成绩: ")))
    #获取最高分
    best = max(score)
    best = int(best)
    #开始赋等级
    for i in score:
        i = int(i)
        if i >= best - 10:
            print("等级为A")
        elif i >= best - 20:
            print("等级为B")
        elif i >= best - 30:
            print("等级为C")
        elif i >= best - 40:
            print("等级为D")
        else:
            print("等级为F")
score_all()

拓展作业

w01. 斐波那契数列

题目描述

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

输入描述

输入一个整数n

输出描述

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

示例

输入:1

输出:1


输入:3

输出:2


输入:8

输出:21

def sequence(n):
    n = int(n)
    m = 2   #设置一个计数器
    if n == 1: print("输出:",0)
    elif n == 2 :print("输出:",1)
    elif n < 1 :print("输入数据有误")
    #正式开启 斐波那契数列数列的算法
    elif n > 2 :
        #定义常量
        x = 0
        y = 1
        z = 0
        #以计数器来作为循环条件
        while m != n:
#观察斐波那契数列可知  在一个加法运算中
# 前一个加法的和作为加数 参与下一个数据加法的运算中
            z = x + y
            x = y
            y = z
            m += 1
        return z

#输出结果
print(sequence(input("请输入要求数据的位置为:")))

w02. 密码等级校验

题目描述

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

  • 弱:都是数字,或者都是大写字母/小写字母组成的密码
  • 中等:[数字、大写字母] 或者 [数字、小写字母] 或者 [大写字母、小写字母] 或者 [大小写字母、数字]组成的密码
  • 强:[数字、大写字母] 或者 [数字、小写字母] 或者 [大写字母、小写字母]并结合特殊符号组成的密码

输入描述

用户输入一个字符串密码

输出描述

输出密码强度等级

示例

输入:abcdef

输出:弱密码


输入:abc123

输出:中等强度


输入:Abc123%

输出:强密码

#这里应该会使用ASCII码 的大小 来判断 大小写英文 和是否有英文
#在 Python 中,可以使用内置函数chr()将 ASCII 码值转换为对应的字符,
# 使用ord()函数将字符转换为对应的 ASCII 码值
#48-122 在数字和 字母在的范围  91-96 是大小写的界限 也是特殊字符

#这里要设置一个类似于计数器 的东西  用来判断密码的强度
def password_verification(n):
    n = str(n)
    number = 0
    math = False
    capital = False
    lowercase = False
    #循环遍历 密码中的每个字符 通过ASCII 码 判断字符的种类
    for i in n:
        if 48 <= ord(i) <= 57:
            math = True
        elif 65 <= ord(i) <= 90:
            capital = True
        elif 97 <= ord(i) <= 122:
            lowercase = True
        else:
            return False
    if math:
        number +=1
    if capital:
        number +=1
    if lowercase :
        number +=1
    else:
        number +=0
    if number == 1: return "弱密码"
    elif number == 2:return "中密码"
    elif number == 3:return "强密码"
    else : return "输入的密码有误"

print(password_verification(input("请输入要检验的密码:")))



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 encrypt(passwords,n=4):
    """"加密函数"""
    #定义一个空变量 方便后续的使用
    ep = ""
    #将形参转化成字符后进行遍历
    for i in str(passwords):
        #将遍历出来的字符转换成ASCII码 赋值给ac
        ac = ord(i)
        #设置加密的进制
        ac +=n
        #设置ASCII 的范围
        if ac > 127:  # 限制在 ASCII 码的有效范围内
            ac = 32 + (ac - 127)
        elif ac < 32:  # 限制在 ASCII 码的有效范围内
            ac = 127 - (32 - ac)
        #将加密后的数据通过转化成 字符 赋值给新的参数_ac
        _ac = chr(ac)
        #因为每个字符被转化回来的话 也是字符的形式 所以可以直接才用加法进行拼接
        ep += _ac
    return ep
#print(encrypt(input("请输入需要加密的密码:"),int(input("输入加密进制"))))
pd = input("请输入明文数据:")
print("加密后的数据:", encrypt(pd, 5))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/920936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光伏电站的智慧施工详解

光伏电站的智慧施工是利用先进的技术和管理方法&#xff0c;提高施工效率、质量和安全性&#xff0c;降低成本&#xff0c;实现光伏电站建设的智能化、数字化和绿色化。 下面从鹧鸪云智慧施工软件详细施工管理的步骤说起。 项目总览 包含我负责的项目、我参与的项目、我创建…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令&#xff1a; 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时&#xff0c;项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中&#xff0c;…

李春葆《数据结构》-课后习题代码题

一&#xff1a;假设不带权有向图采用邻接矩阵 g 存储&#xff0c;设计实现以下功能的算法&#xff1a; &#xff08;1&#xff09;求出图中每个顶点的入度。 代码&#xff1a; void indegree(MatGraph g){int i,j,n;printf("各个顶点的入度&#xff1a;\n");for(i…

wsl安装

一. wsl简介 1. wsl和wsl2的区别 wsl需要把linux命令翻译为windows命令&#xff0c;性能差一些。 wsl2直接使用linux内核&#xff0c;不需要翻译&#xff0c;性能好&#xff0c;但开销相对大一点&#xff0c;因为需要多运行一个hyper-v虚拟机 (并非完整的虚拟机&#xff0c;是…

Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

GPT中转站技术架构

本文介绍阿波罗AI中转站&#xff08;https://api.ablai.top/&#xff09;的技术架构&#xff0c;该中转API的技术架构采用了分布式架构、智能调度和API中转等技术&#xff0c;确保了全球范围内的高效访问和稳定运行。以下是对该技术架构的详细分析&#xff1a; 分布式架构 分…

远程服务器Docker使用本地代理加速访问外部资源

Docker在pull镜像的时候非常缓慢&#xff0c;但是远程主机没有安装代理&#xff0c;就很为难&#xff0c;现在分享一个可以让远程服务器使用本地代理加速的方法 配置Docker代理 新建文件夹 mkdir -p /etc/systemd/system/docker.service.d 切换到这个文件夹里 cd /etc/system…

【详解】树链剖分之重链剖分

终于搞懂了树链剖分的一些皮毛了…… 树链剖分 “树链剖分”&#xff0c;顾名思义&#xff0c;就是把一棵树剖分成一条条的链…… 重链剖分 重链剖分的基本概念 重链剖分是树链剖分的一种&#xff0c;它会把树剖分成一条条重链…… 什么是重链呢&#xff1f; 重链就是连接…

RocketMQ: 部署结构与存储特点

RocketMQ 是什么 它是一个队列模型的消息中间件&#xff0c;具有高性能、高可靠、高实时、分布式特点 Producer、Consumer、队列都可以分布式Producer 向一些队列轮流发送消息 队列集合称为 TopicConsumer 如果做广播消费则一个 consumer 实例消费这个 Topic 对应的所有队列如果…

帮助中心FAQ系统:打造卓越客户服务体验的关键驱动力

在当今这个信息爆炸的时代&#xff0c;企业为了保持市场竞争力&#xff0c;必须不断提升客户服务体验。FAQ&#xff08;常见问题解答&#xff09;系统&#xff0c;作为一种高效且便捷的用户服务工具&#xff0c;正日益受到企业的青睐。本文将阐述FAQ系统的核心价值、功能特性以…

如何使用 Python 开发一个简单的文本数据转换为 Excel 工具

目录 一、准备工作 二、理解文本数据格式 三、开发文本数据转换为Excel工具 读取CSV文件 将DataFrame写入Excel文件 处理其他格式的文本数据 读取纯文本文件&#xff1a; 读取TSV文件&#xff1a; 四、完整代码与工具封装 五、使用工具 六、总结 在数据分析和处理的…

Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥

续 上集说到语义搜索&#xff0c;这集接着玩一下图搜图&#xff0c;这种场景在电商中很常见——拍照搜商品。图搜图实现非常类似语义搜索&#xff0c;代码逻辑结构都很类似… 开搞 还是老地方modelscope找个Vision Transformer模型&#xff0c;这里选用vit-base-patch16-224…

Flink【基于时间的双流联结 Demo】

前言 1、基于时间的双流联结&#xff08;Join&#xff09; 对于两条流的合并&#xff0c;很多情况我们并不是简单地将所有数据放在一起&#xff0c;而是希望根据某个字段的值将它们联结起来&#xff0c;“配对”去做处理。例如用传感器监控火情时&#xff0c;我们需要将大量温度…

大数据入门-什么是Flink

这里简单介绍Flink的概念、架构、特性等。至于比较详细的介绍&#xff0c;会单独针对这个组件进行详细介绍&#xff0c;可以关注博客后续阅读。 一、概念 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在无边界和有边界数据流上进行有状态的计算。 Flink的四大基…

KubeVirt下gpu operator实践(GPU直通)

KubeVirt下gpu operator实践(GPU直通) 参考《在 KubeVirt 中使用 GPU Operator》&#xff0c;记录gpu operator在KubeVirt下实践的过程&#xff0c;包括虚拟机配置GPU直通&#xff0c;容器挂载GPU设备等。 KubeVirt 提供了一种将主机设备分配给虚拟机的机制。该机制具有通用性…

How to update the content of one column in Mysql

How to update the content of one column in Mysql by another column name? UPDATE egg.eggs_record SET sold 2024-11-21 WHERE id 3 OR id 4;UPDATE egg.eggs_record SET egg_name duck egg WHERE id 2;

【K8S系列】imagePullSecrets配置正确,但docker pull仍然失败,进一步排查详细步骤

如果 imagePullSecrets 配置正确,但在执行 docker pull 命令时仍然失败,可能存在以下几种原因。以下是详细的排查步骤和解决方案。 1. 检查 Docker 登录凭证 确保你使用的是与 imagePullSecrets 中相同的凭证进行 Docker 登录: 1.1 直接登录 在命令行中,执行以下命令: …

机器学习基础06

目录 1.梯度下降 1.1梯度下降概念 1.2梯度下降公式 1.3学习率 1.4实现梯度下降 1.5API 1.5.1随机梯度下降SGD 1.5.2小批量梯度下降MBGD 1.6梯度下降优化 2.欠拟合过拟合 2.1欠拟合 2.2过拟合 2.3正则化 2.3.1L1正则项&#xff08;曼哈顿距离&#xff09; 2.3.2…

徒手从零搭建一套ELK日志平台

徒手从零搭建一套ELK日志平台 日志分析的概述日志分析的作用主要收集工具集中式日志系统主要特点采集日志分类ELK概述初级版ELK终极版ELK高级版ELKELK收集日志的两种形式 搭建ELK平台Logstash工作原理Logstash核心概念环境准备安装部署docker添加镜像加速器安装部署Elasticsear…

开源科学工程技术软件介绍 – EDA工具KLayout

link 今天向各位知友介绍的 KLayout是一款由德国团队开发的开源EDA工具。 KLayout是使用C开发的&#xff0c;用户界面基于Qt。它支持Windows、MacOS和Linux操作系统。安装程序可以从下面的网址下载&#xff1a; https://www.klayout.de/build.html KLayout图形用户界面&…