Python从入门到入坟进阶-那些容易被忽略的问题

33 篇文章 0 订阅

前言

哈喽,大家好,入门部分连载一路走过来,得到了很多好评

原因主要是:

1.通俗易懂

2.幽默风趣

我将延续这个传统,继续进阶部分的连载

如果还没看过我的入门连载部分,可以点击这条获取免费的讲解视频

int()强制转换浮点数

在int()的强制转换浮点数时候,不管是正数还是负数,只取整数部分。

注意:这里不是向上或者向下取整,也不是四舍五入。

无限递归

还记得我们讲的俄罗斯套娃么,还记得数列求通项公式么,都用到了递归的思想

如果不记得了,记得回看入门教程哦~

递归是为了将问题简化为更小规模的同类型问题,最后加以解决。

但是有一种情况是递归时不断调用自身,达到不了最简单的情况(例如俄罗斯套娃一层层打开到最内层的)

所以一直找不到递归的出口

 

我们定义了一个函数名为recurse

然后函数体中调用自身

当我们运行调用这个函数时,系统抛出异常,意思是达到了最大的递归深度。

你可以认为系统设置了一个最大递归次数,如果超过这个次数还没解决问题,则抛出异常

简答点说,就是:绕来绕去你怎么还没解决问题,你是要上天么!

 

这种问题,我们要避免

字符串是不可变的

在入门阶段我们说过,字符串和元组是不可变的数据类型,那字符串的不可变体现在哪呢?

看个例子:

如果我想改名字,而且改的是姓【不要当真,只是为了举例子,我爸应该看不到这篇文章的】

我把姓 '王' 改为 ' 方',我就做了如下修改: 

 

 

结果抛出异常,提示不让我修改,这体现了字符串的不可变性,如果你执意要改呢?

可以这样

 

联合使用字符串的切片和拼接完成~

一些遗漏的字符串方法

upper()和lower()方法

upper()能将一个字符串的字母全变成大写,lower()与之相反:

 

find()方法

find()可以在字符串中查找子串是否存在:

 

如果找到,返回的是子串的起始索引位置,例如Hello是从字符串索引0位置开始,空格是在索引5位置

当找不到子串时,返回-1,而不是抛出异常

还可以限定查找开始的索引位置:

 

我们知道,空格的索引是5,当我们从索引3开始往后找,能找到空格

当我们从索引7开始找,则返回没找到,因为索引7已经在索引5之后了

注意操作的返回值

 

我们用a来 接盘 , 啊呸!接收来自print的返回值,发现a是NoneType,所以print是没有返回值的

 

例如在列表中,你希望接收排序的结果,你可能会这样写:

 

发现这样是没有结果的!

你还能找出哪些容易犯错的地方呢?

 

字符串快速转换为列表

在入门阶段我们讲了不同数据类型的转换关系,比如列表和元组。

这里讲讲字符串转为列表!

小明:老湿!字符串和列表好像不像会发生关系的啊!

小明,那我问问你,如果把一个字符串 'Python'  的每个字符作为列表元素,怎么操作?

小明:emmm,小红,还是你来回答吧,毕竟我们也是有关系的

小红:。。。

小红:老师,我觉得可以这样:

 

小红的列表生成式学的很不错啊!给你点赞~

我们今天新学一种方法:

 

这样是不是很简单,就像给元组穿上list外衣一样,给字符串披上list的外衣,就变成了list

小明:老湿!这个看起来也就一般般啊!如果我想把‘I love Python’变成列表,元素分别是I love Python这三个,怎么做呢??

这个嘛...应该是...

小明:老湿,你不会了吧!!!

其实我是在逗你的,我们新学一个字符串分割的方法,分割,有点像列表的切片,只不过之前我们一般是定好位【找到索引】,一刀切下去。

小明:那现在呢?

现在嘛,按照特点切。

小明:什么是按照特点切?

听过庖丁解牛的故事么?

小红:老师,是因为他是从牛身上的骨节脆弱部分切开!

是啊,所以我们可以认为骨节是一种特征,我们找到字符串的特征就能完成任务!

小明:我明白了,我要求的分割字符串就是按照空格分开的!

是的没错,我们现在根据空格将字符串转为列表,小明,给我把我用了19年的那把宰牛刀拿来!

小明:emmm

使用方法:字符串.split('分隔符')

默认是空格,所以这里写了两种!

小明:那如果是2017-12-06呢?

小红:这很简单啊,这样即可:

 

小红举一反三能力不错~

像之前的空格和这里的‘-’都叫做分隔符。

字典中按照键的顺序输出

还记得入门部分降到字典时候么?字典有三大特性其中有一个就是无序性!

小明:老湿,所以呢?

emmm,小明,你听我说完!所以我给你出个题:

 

你看,现在我想按照key的字母顺序看看打印出来的结果,但是先打印的是b,这怎么办!

小明:老湿,你要求真高!不过我真的不会。。

好吧,可以这样的:

 

我们给字典套上个sorted的外衣就行啦!

 

小明,我们要讲的重点是,还记得字典里的key是唯一的么?

小明:记得啊,我还记得根据key可以查找value呢!

那你很棒棒哦,如果让你通过value找key,怎么做呢?

小明:自己挖的坑....

 

嗯,这个确实比较难,我们来看看

还是用刚才的dict1:

 

我们定义一个叫reverse_lookup的函数,传入两个参数

第一个是要查询的字典,第二个是要查的值

然后循环字典,将键对应的值分别和要查找的值比较,当出现异样的就返回!

小明:看起来不错啊

是啊,看起来不错,但是当我们要找的值不在字典里呢?

 

什么都没返回的样子!按照我们的思路,找不到东西也应该告诉我啊

还记得我大学时去面试实习生,面试了3家公司,最后都没给我结果,也不通知我面试没过,这样确实不太好,直白点多好!

所以我们这里学个新的系统关键字:raise

它可以抛出异常!

小明:老湿,我们不喜欢异常,你还要生成异常???

我们看一下具体操作!

 

仔细看看函数重新定义的吧

小明:不就是加了raise那句么?

注意缩进!当找到值对应的key,直接运行return,然后将返回的值传回函数调用处,函数就调用结束了

当我们没找到时候,最后会抛出我们设定的LookupError

小明:老湿,那其实可以这样啊!

 

emmm,是的,这样也可以,不过我这里要强调的是raise的用法!

小明:好吧。。。

人生苦短,我用Python

如果需要Python方面的入门知识可以点击这个链接获取入门资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值