Python150题day16

3.5 int

内置函数int,可以将float、全是数字的字符串转换成int类型的数据,为了降低难度,这个练习题只要求你实现其中的一种功能,将全是数字组成的字符串转换成int类型数据,例如将字符此案“123”转换成整数123,函数定义如下:

def my_int(string):

        """

        将字符串string转成int类型数据

        不考虑string的类型,默认就是符合要求的字符串

        传⼊字符串"432"

        返回整数432

        :param string:

        :return:

        """

        pass

代码:

str_int_dic = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9 }

def my_int(string):

        res = 0

        for item in string:

                int_value = str_int_dic[item]

                res = res*10 + int_value

        return res

思路:

遍历字符串,将每个字符串里的每个字符传换成int类型的数值,这个过程可以使用字典来完成,建立一个字典,字符串的数字做key,int类型的数字做value,例如下面的字典

str_int_dic = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9 }

得到数字后,还得考虑这个数字是哪一位的,是千位还是百位,这里可以使用一个技巧,遍历的过程都是从左向右进行的,设置一个变量保存转换后的int数据,初始值赋为0,每一次循环后,都用这个变量乘10再加上所遍历的数值,这样就巧妙地解决了位数问题。

3.6 str

内置函数str的功能非常强大,想要模仿实现一个相同功能的函数是非常困难的,因此本练习题只要求将int类型的数据转换成字符串,实现下面的函数:

def my_str(int_value):

        """

        将int_value转换成字符串

        :param int_value:

        :return:

        """

        pass

代码:

def my_str(int_value):

    if int_value == 0:
        return '0'


    lst = []
    is_positive = True   #标记是否是负数
    if int_value < 0:
        is_positive = False
        int_value = abs(int_value)


    while int_value:
        number = int_value % 10
        int_value //= 10
        str_number = chr(number + 48)
        lst.append(str_number)


    if not is_positive:
        lst.append('-')


    lst = lst[::-1]    #倒序输出
    return ''.join(lst)

代码详解:

   if int_value == 0:
        return '0'

首先,函数检查输入的整数是否为0。如果是0,那么函数直接返回字符串`'0'`,表示整数0的字符串形式。


    lst = []
    is_positive = True
    if int_value < 0:
        is_positive = False
        int_value = abs(int_value)

接下来,函数创建一个空列表`lst`,用于存储每个数字的字符形式。同时,函数定义一个布尔变量`is_positive`,用于表示整数的正负情况。如果输入的整数`int_value`小于0,说明它是一个负数,那么将`is_positive`设置为`False`,并将`int_value`取绝对值,以便后续处理。


    while int_value:
        number = int_value % 10
        int_value //= 10
        str_number = chr(number + 48)
        lst.append(str_number)

接下来是一个循环,用于将整数的每个位数提取出来并转换为字符形式。循环条件是`int_value`不为0,即还有位数需要处理。在每次循环中,通过取整数`int_value`除以10的余数,可以得到当前位的数字。然后,将`int_value`整除以10,以便处理下一位。将数字转换为字符的过程使用了`chr()`函数,其中`number + 48`将数字转换为对应的ASCII码。将字符添加到列表`lst`中。


    if not is_positive:
        lst.append('-')
    lst = lst[::-1]
    return ''.join(lst)

在循环结束后,检查整数的正负情况。如果输入的整数为负数,即`is_positive`为`False`,那么在最终的字符串前添加一个负号`'-'`。然后,将列表`lst`进行反转操作,以便得到正确的数字顺序。最后,使用`''.join(lst)`将列表中的字符连接成一个字符串,并将其作为函数的返回值。

总体来说,这段代码的作用是将整数转换为字符串形式。它通过不断地取整数的每个位数,并将每个位数的字符形式存储在列表中,最后将列表中的字符连接起来,得到整数的字符串表示。

思路:

int类型的数据,不能像字符串那样使用for循环进行遍历,但可以结合/和%操作符从各位向高位进行遍历,获取到某一位的数字之后,将其转换成字符串append到一个列表中。

遍历结束后,翻转列表,用空字符串join这个列表,即可得到转换后的字符串。

单个数字,怎样转换成字符串?可以使用3.6中类似的方法, 创建一个字典,数字为key,字符串数字为value

int_str_dict = { 0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', }

获得某一位数字之后,通过字典获得对应的字符串,此外,还可以通过ASCII码来获得与之对应的数字字符。以3为例,chr(3+48)即可得到字符串“3”,其原理,字符串3的ASCII码表十进制数值为51,恰好比3大48,其他数值,也同样如此。

细节性问题:

①如果传入的参数是0,那么直接返回字符串‘0’

②如果传入的参数是负数,那么需要标识记录,最后在列表里append一个‘-’字符串

③lst=[1,2,3],  反转  lst=lst[::-1]

3.7 float

为了降低难度,只要求将字符串转换成float类型的数据,并且字符串都是符合”xx.xx”类型的字符串,例如“34.22”

def my_float(string):

"""

将字符串string转换成float类型数据

:param string:

:return:

"""

pass

代码:

str_int_dic = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8':  8, '9': 9}

def my_float(string):

        arrs = string.split('.')

        int_value = my_int(arrs[0])       #整数部分

        float_value = my_int(arrs[1])    #小数部分

        while float_value > 1:

                float_value *= 0.1

        return int_value + float_value

思路:

使用split函数,可以以"."作为分隔符,可以将字符串分割为两部分,整数部分小数部分,以"34.22"为例,分别得到整数3422,对于22,不停的乘以0.1,直到它的数值小于1,就得到了小数部分

3.8 len

内置函数len可以获得可迭代对象的长度,例如字符串、列表、元组、集合。实现一个类似功能的函数,获得数据的长度。

def my_len(obj):

        """

        获得obj对象的⻓度

        :param obj:

        :return:

        """

        pass

代码:

from collections import Iterable

def my_len(obj):

        if not isinstance(obj, Iterable):

                return None

        length = 0

        for item in obj:

                length += 1

        return length

思路:

使用for循环遍历对象,循环的次数就是这个对象的长度,只需要一个变量来保存循环的次数就可以了。

对obj参数的检查,可以使用isinstance判断是否为列表、元组、字典、集合、字符串中的某一个,更为简便的做法就是,这些对象都是可迭代对象isinstance(obj,lterable)可以判断obj是否为可迭代对象

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为数通方向HCIP-DataCom H12-831题库(单选题:221-240)

第221题 以下哪些项能被正则表达式^30.成功匹配? A、200 100 300 B、100 200 300 C、300 200 100 D、300 100 200 答案:CD 解析: 30.其中的“点”表示的是任何的一个数字,表示的是as-path的开头;所以以300开头的都是满足题目需求的。 第222题 以下哪些项的Community属性能…

厌烦了iPhone默认的热点名称?如何更改iPhone上的热点名称

你对你默认的热点名称感到厌倦了吗&#xff1f;这篇文章是为你准备的。在这里&#xff0c;你可以了解如何轻松更改iPhone上的热点名称。 个人热点会将你的手机数据转换为Wi-Fi信号。手机上的个人热点使用户能够与其他用户共享其蜂窝数据连接。当你在WIFI网络之外时&#xff0c…

时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测

时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测 目录 时序预测 | MATLAB实现ICEEMDAN-IMPA-GRU时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 ICEEMDAN-IMPA-GRU功率/风速预测 基于改进的自适应经验模态分解改进海洋捕食者算法门控循环单元时间序列预…

通过IP地址管理提升企业网络安全防御

在今天的数字时代&#xff0c;企业面临着越来越多的网络安全威胁。这些威胁可能来自各种来源&#xff0c;包括恶意软件、网络攻击和数据泄露。为了提高网络安全防御&#xff0c;企业需要采取一系列措施&#xff0c;其中IP地址管理是一个重要的方面 1. IP地址的基础知识 首先&a…

​企业数据泄露不断,深信服EDR助企业构建数据“安全屋”

随着数字时代不断发展,数据泄露问题愈发严峻,个人信息安全面临着严重的威胁。近日,加拿大电信巨头加拿大贝尔(Bell Canada)对外披露了一起大规模数据泄露事件,该公司承认黑客入侵其系统,并窃取了190万个用户电子邮件地址以及约1700个用户姓名及活跃电话号码信息,相关损失无法估…

常见弯道输送机有哪些

提到弯道输送机您可能首先想到的就是弯道滚筒线&#xff0c;其实除了滚筒线之外&#xff0c;也有一些其他线体可以做弯道&#xff0c;下面就为您总结了4种常见的弯道输送机。 1、弯道皮带线&#xff1a;即线体转弯处设计成皮带输送机&#xff0c;这种形式的转弯设计可以实现不同…

【ElasticSearch】基于 Java 客户端 RestClient 实现对 ElasticSearch 索引库、文档的增删改查操作,以及文档的批量导入

文章目录 前言一、对 Java RestClient 的认识1.1 什么是 RestClient1.2 RestClient 核心类&#xff1a;RestHighLevelClient 二、使用 Java RestClient 操作索引库2.1 根据数据库表编写创建 ES 索引的 DSL 语句2.2 初始化 Java RestClient2.2.1 在 Spring Boot 项目中引入 Rest…

ChatGPT多模态升级,支持图片和语音,体验如何?

一、前言 9 月 25 日&#xff0c;ChatGPT 多模态增加了新的语音功能和图像功能。这些功能提供了一种新的、更直观的界面&#xff0c;允许我们与 ChatGPT 进行语音对话或展示我们正在谈论的内容。 ChatGPT 现在可以看、听、和说话了&#xff0c;而不单单是一个文本驱动的工具了。…

Vue 路由跳转设置不刷新

一、问题描述 在某些情况下&#xff0c;vue项目前端有些情况下需要设置路由跳转&#xff0c;页面不刷新&#xff0c;比如: 前进导航刷新页面&#xff0c;后退不刷新&#xff0c;page1–>page2–>page3&#xff0c;每次前进到一个新页面都需要获取数据&#xff0c;而按下…

Android攻城狮学鸿蒙 -- 点击事件

具体参考&#xff1a;华为官网学习地址 1、点击事件&#xff0c;界面跳转 对于一个按钮设置点击事件&#xff0c;跳转页面。但是onclick中&#xff0c;如果pages前边加上“/”&#xff0c;就没法跳转。但是开发工具加上“/”才会给出提示。不知道是不是开发工具的bug。&#…

第11章 Redis(二)

11.11 Redis 哨兵机制和集群有什么区别 难度:★★★ 重点:★★ 白话解析 前面的题目都是Redis的原理,接下来就是实际使用的问题了,首先Redis为了保证高可用,在微服务场景下必须是部署集群的,而Redis的集群部署通常就两种方式:主从和Redis Cluster。 参考答案 1、主从…

Charles:移动端抓包 / windows客户端 iOS手机 / 手机访问PC本地项目做调试

一、背景描述 1.1、本文需求&#xff1a;移动端进行抓包调试 1.2、理解Charles可以做什么 Charles是一款跨平台的网络代理软件&#xff0c;可以用于捕获和分析网络流量&#xff0c;对HTTP、HTTPS、HTTP/2等协议进行调试和监控。使用Charles可以帮助开发人员进行Web开发、调试…

汽车电子 - AUTOSAR

汽车电子 - AUTOSAR 概念 概念 https://zhuanlan.zhihu.com/p/542653053?utm_id0

解决:使用WileyNJDv5_Template模板时,无法生成pdf文件。

目录 问题&#xff1a; 解决办法&#xff1a; 检查过程&#xff1a; WileyNJDv5-Template模板链接&#xff1a;New Journal Design LaTeX template (wiley.com) 问题&#xff1a; 使用wileyNJDv5_Template模板时候&#xff0c;无法生成pdf文件。无论是使用texlivetexmaker还…

设计模式_模板方法模式

模板方法模式 前言 行为型设计模式 关注对象和行为的分离。 关于父类与子类 调用时候 具体调用的哪一个&#xff1f; 普通方法调用编译时决定左边决定抽象/虚方法调用运行时决定右边决定 介绍 设计模式定义案例模板方法模式父类 定义了业务流程&#xff0c;其中一部分 延…

JAVA项目点赞功能如何实现?如何利用缓存优化?如何防止刷赞?

- 普通的点赞如何实现&#xff1f; - 每个人都见过点赞功能&#xff0c;大家想实现一个点赞功能也简单&#xff0c;比如一个简单的文章点赞逻辑如下&#xff1a; 首先需要建个表&#xff0c;记录下点赞人的id&#xff0c;被点赞文章的id&#xff0c;点赞状态三个关键因素即可&a…

【stm32芯片设置解惑】:stm32F103系列的开漏输出和推挽输出的区别

场景&#xff1a; 大家在开发stm32的时候&#xff0c;不管是标准库开发还是hal库开发&#xff0c;最基础的就是芯片引脚的某某设置&#xff0c;为什么这么设置&#xff1f;这样设置的好处是什么&#xff1f; 问题描述 — 开漏输出和推挽输出的用处和区别 什么是开漏输出&#x…

FPGA实现HDMI输入转SDI视频输出,提供4套工程源码和技术支持

目录 1、前言免责声明 2、我目前已有的SDI编解码方案3、设计思路框架核模块解析设计框图IT6802解码芯片配置及采集ADV7611解码芯片配置及采集silicon9011解码芯片配置及采集纯verilog的HDMI 解码模块RGB888转YUV422SPMTE编码SDI模式图像缓存SPMTE SDIGTXGV8500 4、vivado工程1-…

途虎养车上市、京东养车“震虎”,如何突围汽车后市场?

“汽车后市场第一股”终于来了&#xff01; 赶在十一黄金周之前&#xff0c;途虎养车股份有限公司(09690.HK&#xff0c;下称“途虎养车”)于9月26日挂牌港交所&#xff0c;开盘价为28港元/股&#xff0c;与发行价持平&#xff1b;IPO首日报收29.50港元/股&#xff0c;涨幅5.3…

Mac中使用virtualenv和virtualenvwrapper

Virtualenv 介绍 在使用 Python 开发的过程中&#xff0c;工程一多&#xff0c;难免会碰到不同的工程依赖不同版本的库的问题&#xff1b;亦或者是在开发过程中不想让物理环境里充斥各种各样的库&#xff0c;引发未来的依赖灾难。 因此&#xff0c;我们需要对于不同的工程使…