《练习100》26~30

题目26

# 利用递归函数调用方式,将输入的5个字符,以相反顺序打印出来

# str 本身提供了翻转的方法
# 为了构建一个正确的递归函数,我们需要有一个不需要继续递归的基本情况,不然的话递归就变成了无限循环。
# 思路: 每次取开始位置的字符,然后逆序拼接
# 输入: asdfg
# 如何取第一个字符:s[0], s[0:1]
# 如何逆序拼接: 递归有返回值的是最深的那次调用: 最后次调用的返回值为'' 
# 倒数第二次调用的就是 ‘’+‘g’
# 依次类推: ‘’+'g'+'f'+'d'+'s'+'a' 和在一起就是gfdsa 正好的输入的逆序

def my_reserve(s):
    if s == "":
        print('s = ""')
        return s
    else:
        print(f"my_reserve(s[1:]) + s[0] = my_reserve({s[1:]}) + {s[0]}")
        return my_reserve(s[1:]) + s[0]

name=''
try:
    for i in range(5):
        tmp = input(f"总共需要5个,请输入第{i+1}个字符:")
        if len(tmp) >1:
            raise ValueError("输入的字符超长")
        name += tmp
    print("你输入的字符顺序是:", name)
    print(my_reserve(name))
except ValueError as e:
    print("请输入如何要求的长度", e)

题目27

# 有五个人,第五人比第四人大2岁,第四比第三大2岁,以此类推,第一人10岁,求第五人的岁数
#  fn = fn-1 + 2 n > 1, n = 1时, f1 = 10

def get_age(n):
    if n == 1:
        return 10
    
    return get_age(n-1) + 2

for i in range(1,6):
    print(f"第{i}{get_age(i)}岁")

题目28

# 给一个不多于5位的数字,求其是几位数字,逆序打印各位数字

# 将数字转为str,然后求str的长度即可
def get_num_of_digits(num:int):
    return len(str(num))

# 逆序
def reserver(num:str):
    if num == '':
        return num
    return reserver(num[1:]) + num[0]

print(f"12340 是一个{get_num_of_digits(12340)}位数, 逆序输出为 : {reserver(str(12340))}")


# 第二种:分别获取各个位置上的数字,由于最多5位   
def get_num_of_digits1(num:int, max:int = 5):
    """获取数字各个位置上的数字,并逆序输出

    Args:
        num (int): 待解析的数字
        max (int): 预期解析的长度
    """
    nums = ''
    for i in range(len(str(num))):
        tmp = '1' + '0' * i
        tmp = str(num//int(tmp))
        nums+= tmp[len(tmp) -1]
    print(f"数字{num},是一个{len(nums)}位数,逆序输出为:{nums}")
    
get_num_of_digits1(1234500,10)

题目29

# 判断一个5位数字是否是回文。
# 中间数字的左右两边是对称的(正序与反序一样)
 
# 第一种利用字符串切片
def is_palindrome(num:int):
    str_before = str(num)
    str_after = str(num)[::-1]
    
    if str_before == str_after:
        print(f"数字{num}是回文")
        return True
    return False                  

is_palindrome(12421)
is_palindrome(12345)

# 第二种利用index可以为负,代表倒数.以中间位置的元素为分界线
# index 0 和index -1比较
# index 1 和index -2比较
def is_palindrome1(num:int):
    # 数字转字符串
    tmp = str(num)
    # 获取一半的位置
    for i in range(len(tmp)//2):
        if tmp[i] != tmp[-i -1]:
            return False
    print(f"数字{num}是回文")  
    return True
    
is_palindrome1(12421)
is_palindrome1(12345)

for i in range(1002):
    is_palindrome(i)
    is_palindrome1(i)

题目30

# 请输入星期几的第一个字母来判断是星期几,如果第一个字母一样,则继续判断第二个字母
# 思路,根据字母筛选,直到只剩一个结果。那么这个结果就是输入的
week = ['monday','tuesday','wednesday','thursday','friday','saturday','sunday']

def guess_day_of_week():
    index = 0
    while True:    
        try:
            first = str(input(f"请输入第{index+1}个字母:"))
            if len(first) > 1:
                raise ValueError(f"请输入一个字母,当前输入{len(first)}个!!!!")
            
            if not first.isalpha():
                raise ValueError(f"请输入字母,当前输入的{first},不是字母!!!!")
           
            # 这一段是不是可以用递归实现,备选范围和比较的字母在随着调用次数变化而变化 
            filter1 = []
            for i in week:
                if i[index] == first:
                    filter1.append(i)
                    continue
            print(f"输入的第{index+1}个字母是{first},目前的备选有{filter1}")
            if len(filter1) > 1:
                index += 1
                continue
            elif len(filter1) == 1:
                print(filter1[0])
                return filter1[0]
            else:
                raise ValueError("请输入周一到周日的英文字母。")
        except ValueError as e:
            print(e)

# guess_day_of_week()


# 递归实现周几匹配
def guess_day_of_week1(day_range: list,index:int = 0):
    if len(day_range) == 1:
        return day_range[0]
    elif not len(day_range):
        print("当前输入的字母没有备选的星期几")
        return None
    first = ''
    
    # 这一段是确保用户输入的是一个字母
    while True:
        try:
            first = str(input(f"请输入第{index + 1}个字母:"))
            if len(first) > 1 :
                raise ValueError(f"请输入一个字母,当前输入{len(first)}个!!!!")
            
            if not first.isalpha():
                raise ValueError(f"请输入字母,当前输入的{first},不是字母!!!!")
            break
        except ValueError as e:
            print(e)
        except IndexError:
            print("无法猜测当前输入的是周几。")
    
    # 这一段才是真正的在根据用户的输入从备选中筛选
    filter1 = []
    for i in day_range:
        if i[index] == first[0]:
            filter1.append(i)
            continue
    
    return guess_day_of_week1(filter1, index + 1)

print(guess_day_of_week1(week))

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

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

相关文章

Python批量将Excel内指定列的数据向上移动一行

本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,对其中的每一个文件加以操作——将其中指定的若干列的数据部分都向上移动一行,并将所有操作完毕的Excel表格文件中的数据加以合并,生成一个新的Excel文件的方法。 首…

虚拟机(VMware)安装Linux(Ubuntu)安装教程

清华大学开源网站镜像站网址:清华大学开源软件镜像站 | Tsinghua Open Source Mirror 进入之后在搜索框中搜索“ubuntu” 直接点击箭头所指的蓝色字体“ubuntu-20.04.1-desktop-amd64.iso”即可下载

一起学算法(位运算篇)

1.位运算 1.二进制数值表示 在计算机中,我们可以用单纯的0和1来表示数字,一般不产生歧义,我们会在数字的右下角写上它的进制,例如:1010(10)其表示的是1010,1010(2&#…

Windows下安装HBase

Windows下安装HBase 一、HBase简介二、HBase下载安装包三、环境准备3.1、 JDK的安装3.2、 Hadoop的安装 四、HBase安装4.1、压缩包解压为文件夹4.2、配置环境变量4.3、%HBASE_HOME%目录下新建临时文件夹4.4、修改配置文件 hbase-env.cmd4.4.1、配置JAVA环境4.4.2、set HBASE_MA…

【css】背景图片附着

属性&#xff1a;background-attachment 属性指定背景图像是应该滚动还是固定的&#xff08;不会随页面的其余部分一起滚动&#xff09;。 background-attachment: fixed&#xff1a;为固定&#xff1b; background-attachment: scroll为滚动 代码&#xff1a; <!DOCTYPE h…

【1.4】Java微服务:服务注册和调用(Eureka和Ribbon实现)

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 微服务 ✨特色专栏&#xff1a; 知识分享 &#x…

企业数据,大语言模型和矢量数据库

随着ChatGPT的推出&#xff0c;通用人工智能的时代缓缓拉开序幕。我们第一次看到市场在追求人工智能开发者&#xff0c;而不是以往的开发者寻找市场。每一个企业都有大量的数据&#xff0c;私有的用户数据&#xff0c;自己积累的行业数据&#xff0c;产品数据&#xff0c;生产线…

【Linux进程篇】进程概念(1)

【Linux进程篇】进程概念&#xff08;1&#xff09; 目录 【Linux进程篇】进程概念&#xff08;1&#xff09;进程基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类 组织进程查看进程通过系统调用获取进程标示符通过系统调用创建进程——fork初识 作者&#xff…

2023软件设计师中级备考经验分享(文中有资料链接分享)

先摊结论吧&#xff0c;软考中级设计师备考只是备考半个月&#xff08;期间还摆烂了几天&#xff09;&#xff0c;然而成绩如下&#xff1a; 我自己都没想到会这么好的成绩。。。 上午题&#xff1a;推荐把软考通APP里的历年真题刷3-4遍&#xff0c;直接刷真题&#xff0c;然后…

分享一些精选的开源框架与代码!

今天主要是收集并精选了一些自己所了解和学习过的优秀的嵌入式开源框架代码和项目&#xff0c;不太了解的就不推荐给大家了&#xff0c;因为开源的东西实在是太多了&#xff0c;鱼龙混杂&#xff0c;所以取其精华去其糟粕是迫在眉睫的大事~ 当然也不要总是沉浸在开源的东西之中…

光伏、储能一体化监控及运维解决方案

前言 今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电力系统更为复杂&#xff0…

基于多任务学习卷积神经网络的皮肤损伤联合分割与分类

文章目录 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network摘要本文方法实验结果 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network 摘要 在…

idea 里 controller service impl mapper xml 切换跳转快捷键

首先在controller层&#xff0c;对着接口点方法的方法上按着ctrl和鼠标左键&#xff0c;你会进入service层。 对着方法ctrlaltb不按鼠标&#xff0c;你会进入impl层。service层的方法上按ctrl和鼠标左键会回到controller&#xff0c;ctrlaltb不按鼠标也会进入到impl层,impl上的…

vue echart3个饼图

概览&#xff1a;根据UI设计需要做3个饼图且之间有关联&#xff0c;并且处理后端返回的数据。 参考链接&#xff1a; echart 官网的一个案例&#xff0c;3个饼图 实现思路&#xff1a; 根据案例&#xff0c;把数据处理成对应的。 参考代码&#xff1a; 1.处理后端数据&am…

谐音标注外语发音的学习方式,早该终结了!

语言学习的热潮席卷全国&#xff0c;在多数80、90后记忆里尤为深刻&#xff0c;部分对外语过敏的同学&#xff0c;就像溺水的鱼&#xff0c;使劲扑棱也无济于事&#xff0c;难受但是死不了&#xff0c;在懵懂的年纪就被“摧残”了整个青春。 记忆中遇到记不住读音的单词&#x…

Python模块psycopg2连接postgresql

目录 1. 基础语法 2. 基础用法 3. 多条SQL 4. 事务SQL 1. 基础语法 语法 psycopg2.connect(dsn #指定连接参数。可以使用参数形式或 DSN 形式指定。host #指定连接数据库的主机名。dbname #指定数据库名。user #指定连接数据库使用的用户名。…

DEVICENET转ETHERNET/IP网关devicenet协议

捷米JM-EIP-DNT&#xff0c;你听说过吗&#xff1f;这是一款自主研发的ETHERNET/IP从站功能的通讯网关&#xff0c;它能够连接DEVICENET总线和ETHERNET/IP网络&#xff0c;从而解决生产管理系统中协议不同造成的数据交换互通问题。 这款产品在工业自动化领域可谓是一大利器&…

对原型、原型链的理解

在 JavaScript 中是使用构造两数来新建一个对象的&#xff0c;每一个构造函数的内部都有一个 prototype 属性&#xff0c;它的属性值是一个对象&#xff0c;这个对象包含了可以由该构造西数的所有实例共享的属性和方法。当使用构造函数新建一个对象后&#xff0c;在这个对象的内…

计算机网络(1) --- 网络介绍

目录 1.介绍协议 基础知识 协议 协议分层 OSI七层模型 2.TCP/IP五层模型 3.网络传输的基本流程 1.基本知识 协议报头 2.局域网通信的基本流程 3.网络传输流程 局域网分类 跨路由器传输 数据包封装和分用 4.网络中的地址管理 1.IP地址 2.MAC地址 3.区别 1.介绍…

每天一个电商API分享:淘宝/天猫关键字搜索店铺列表 API

淘宝/天猫搜索店铺列表 API 是一个强大而灵活的工具&#xff0c;可以帮助开发者在自己的应用中集成淘宝/天猫搜索店铺列表的功能。通过这个 API&#xff0c;开发者可以获取指定关键词下的店铺列表&#xff0c;并根据自己的需求自定义搜索条件。该 API 提供丰富的参数选项&#…
最新文章