当前位置: 首页 > article >正文

函数基础练习(Python)

01.计算车费

题目描述

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

输入描述

输入一个公里数

输出描述

输出应付车费

示例

输入:

5

输出:

12

def expenses(n):
    """收费行为"""
    n = int(n)
    total_expense = ""
    # 判断行驶公里数是否大于三公里
    if n <= 3:
        # 计算总收费
        total_expense = 8
    else:
        # 计算总收费
        total_expense = (n - 3) * 2 + 8
    # 返回结果数据
    return total_expense
​
​
# 提示输入公里数
km = input("请输入公里数:")
# 调用函数
total = expenses(km)
print(f"行驶{km}公里应付车费为{total}")

02.整数叠加

题目描述

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

输入输出描述

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

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

提示

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

示例1

输入:

999

输出:

27

解释:

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

"""整数叠加"""
def calculate_digit_sum(n):
    """整数看加函数,将一个数据拆分每个数字进行叠加"""
    #将整数转化成字符串
    n = str(n)
    # 声明变量,存储数据的和
    total = 0
    # 遍历字符申n,获取每个字符数字
    for c in n:
        total += int(c)
    return total
#调用函数
n=input("请输入一个数:")
total_sum=calculate_digit_sum(n)
print("各位数之和:",total_sum)

03.时间拆分

题目描述

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

输入描述

输入一个分钟数

输出描述

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

示例

输入:

1000000000

输出:

1902

214

def invert_years_day(minute):
    """转化行为"""
    minute = int(minute)
    # 转化为年数
    years =  int(minute / 60 / 24 / 365)
    # 转化为天数
    days = (minute / 60 / 24) - (years * 365)
    # 类型转化
    days=int(days)
    # 返回数据
    return years, days
​
​
miu = input("请输入分钟数:")
# 调用函数
a, b = invert_years_day(miu)
# 输出结果
print(f"年数{a}")
print(f"天数{b}")
​
​

04.回文素数

题目描述

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

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

示例

2 3 5 7 11 101 131 151 181 191

"""回文素数"""
​
# 定义一个函数判断是否为素数
def prime_number(n):
    # 能被除1和本身整除返回false
    if n > 2:
        for i in range(2, n):
            if n % i == 0:
                return False
    # 不能则返回true
    return True
​
​
# 定义一个函数判断是否是回文数
def palindrome_number(n):
    n = str(n)
    c = ""
    for i in n:
        c = i + c
    return c == n
​
​
# 定义一个初始数num和输出100个回文素数count(0-99)
num = 1
count = 0
# 循环输出100个回文素数
while count < 100:
    # 初始数n开始累加
    num += 1
    # 调用函数
    if prime_number(num) and palindrome_number(num):
        # 满足条件就找下一个
        count += 1
        print(num, end=" ")
        # 10个数一行输出
        if count % 10 == 0:
            print()
            # 初始数n开始累加
            num += 1

05.反素数

题目描述

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

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

"""反素数"""
# 定义一个函数判断是否为素数
def prime_number(n):
    if n > 2:
        for i in range(2, n):
            if n % i == 0:
                return False
    return True
​
​
# 定义一个函数判断是否是回文数
def palindrome_number(n):
    n = str(n)
    c = ""
    for i in n:
        c = i + c
    return c == n
​
​
# 定义一个函数判断是否为反素数
def antiprimes_number(n):
    # 转化为字符串
    n_str = str(n)
    # 反向输出
    n1 = n_str[::-1]
    # 判断原来的数和反过来的数是否为素数并不是回文数
    if prime_number(n) and prime_number(int(n1)) and not palindrome_number(n):
        return True
    else:
        return False
​
​
# 定义一个初始数num和输出100个回文素数count(0-99)
num = 1
count = 0
# 循环输出100个回文素数
while count < 100:
    # 初始数n开始累加,再判断
    num += 1
    # 调用函数
    if antiprimes_number(num):
        # 满足条件就找下一个
        count += 1
        print(num, end=" ")
        # 10个数一行输出
        if count % 10 == 0:
            print()

06.双素数

题目描述

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

输出显示小于1000的双素数

"""双素数"""
#判断是否为素数
def prime_number(n):
    if n > 2:
        for i in range(2, n):
            if n % i == 0:
                return False
    return True
#用循环遍历小于1000的数
for num in range(3,1000):
    #调用函数,使prime_number为True
    if prime_number(num) and prime_number(num+2):
        #打印出一对素数
        print(num,num+2)

07.梅森素数

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

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

"""梅森素数"""
#判断是否为素数
def prime_number(n):
    if n > 2:
        for i in range(2, n):
            if n % i == 0:
                return False
    return True
#遍历p<=31
for p in range(1,32):
    #梅森素数满足条件
    mp = 2**p-1
    #调用函数
    if prime_number(mp):
        print(f"第{p}个梅森素数为{mp}")

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 stack_additive(a,n):
    total =0
    #堆叠i次
    for i in range(1,n+1):
        #转化为字符串再自身堆叠
        s=str(a)*i
        #堆叠后相加
        total +=int(s)
    return total
#提示输入
a = input("请输入数字:")
n = int(input("请输入组数:"))
#调用函数
s=stack_additive(a,n)
print(s)

09.检测密码

题目描述

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

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

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

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

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

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

输入输出描述

输入一串密码

输出该密码是否符合规则

示例1

输入:

123456ab

输出:

No

示例2

输入:

123abcABC

输出:

Yes

"""
密码检验
"""
def detect_password(pwd):
    """检测密码"""
    number_cnt = 0  # 数字计数器
    upper_cnt = 0   # 大写字母计数器
    if len(str(pwd)) < 8:
        print("密码长度不足8位,不符合要求!")
        return False
    for c in str(pwd):
        if not (65 <= ord(c) <= 90 or 97 <= ord(c) <= 122 or 48 <= ord(c) <= 57):
            print("密码中包含非法字符,不符合要求!")
            return False
        if 48 <= ord(c) <= 57: # 判断包含一个数字就更新一次计数器
            number_cnt += 1
        if 65 <= ord(c) <= 90: # 判断包含一个大写字母就更新一次计数器
            upper_cnt += 1
    # 必须包含2个以上的数字和大写字母
    # 3. 逻辑表达式,简化写法
    return number_cnt >= 2 and upper_cnt >= 2
    # 2. 三元运算写法
    # return True if number_cnt >= 2 and upper_cnt >= 2 else False
    # 1. 格式化的写法
    # if number_cnt >= 2 and upper_cnt >= 2:
    #     return True
    # return False
​
password = input("请输入密码:")
result = detect_password(password)
print("检测结果:", result)

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 assign_grade(scores):
    #找到最大值
    best = max(scores)
    #定义一个空列表 
    grades = []
    #用for循环让满足条件的等级值追加到grades列表中
    for score in scores:
        if score >= best - 10:
            grades.append("A")
        elif score >= best - 20:
            grades.append("B")
        elif score >= best - 30:
            grades.append("C")
        elif score >= best - 40:
            grades.append("D")
    return grades
​
#提示输入数据
n = int(input("请输入学生人数n: "))
#将输入的数据转换为list表
scores = list(map(int, input(f"请输入{n}个学生的成绩: ").split()))
#调用函数
grades = assign_grade(scores)
#输出学生序号,成绩,等级
for i, g in enumerate(grades):
    print(f"学生{i}的成绩为{scores[i]}, 等级为{g}")


http://www.kler.cn/a/385316.html

相关文章:

  • 2024阿里云CTF Web writeup
  • 使用最新版的wvp和ZLMediaKit搭建Gb28181测试服务器
  • 计算机网络——TCP中的流量控制和拥塞控制
  • 微服务day02
  • springboot 传统应用程序,适配云原生改造
  • 在Ubuntu下安装RabbitMQ、添加一个新的登录用户并设置密码
  • 少儿编程启蒙学习
  • python爬虫指南——初学者避坑篇
  • leetcode | 88. 合并两个有序数组
  • WebSocket 及时通信 - 2024最新版前端秋招面试短期突击面试题【100道】
  • 远程控制项目第二天
  • 【GPTs】Email Responder Pro:高效生成专业回复邮件
  • mysql分布式锁
  • CSS实现图片3D立体效果
  • 苍穹外卖学习记录
  • OkHttp网络请求框架
  • Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
  • Mysql 大表limit查询优化原理实战
  • 【ESP32+MicroPython】网络编程基础
  • 从个人品牌到企业品牌:开源 AI 智能名片 S2B2C 商城小程序的启示
  • QT 5.13.0 + MSVC2017 + MYSQL8.0.11
  • RabbitMQ 不公平分发介绍
  • VUE单页面 路由
  • Netty篇(入门编程)
  • 麒麟信安支撑2024年电力监控系统网络安全加固培训护航电力网络安全!
  • vscode----ssh远程连接输入地址跳转扩展