听学编程之python_听学编程之Python 三、宝玉在红楼梦里说了什么

应听友要求,根据喜马拉雅上的音频节目『听学编程之Python』整理所得。

除了数值外,Python处理字符串特别方便,甚至在编程界,也算是最方便的类型。要掌握哪些入门知识呢?字符串 unicode 列表。

1 字符串

用单引号或双引号标识。所有的字符都被放在单引号和双引号

>>> ' hello' # single quotes

'spam eggs’

加法和乘法 索引 查找

1.1 字符加法和乘法

字符串可以由 + 操作符连接(粘到一起),可以由 * 重复:

>>>'hello' + 'world'

字符的乘法

‘hello'*9

1.2 索引 index

什么叫索引,一个班所有的学生都有学号,按照学号排好队,学号就是索引,从0开始。表示了内存中的位置序号。

1.2.1 找到索引的字符

>>> ’hello’[0] h

如果是negative numbers,负数,那就是从右到左。最后一个是-1

>>> ’hello’[-1] o

1.2.2 使用索引切片 slicing

slicing 切片。获取子字符串。那怎么取呢?

>>> ’hello’[0:2]

‘he'

‘hello’[1:]

‘hello’[:1]

1.3 查找

找到字符的索引。

需要使用方法了。方法就是函数,属于类或者类的实例叫做对象。听不懂不要紧。’hello’就是一个对象,是str类的实例。

isinstance(‘hello’,str) true

'hello'.find('l') 2

‘hello'.rfind('l') 3

len(‘hello’) 是一个内置函数,是解释器自带的函数,直接使用即可。exit()就是这样的。解释器看得懂。

2 unicode 编码和解码 encode decode

2.1第一印象

s = ‘中国’

u = u’中国’

首先介绍一个内置函数,内置函数就是随时随地直接使用的,已经帮你加载好了。

type()

如果你不知道就是用type(), str unicode

解释器内部是不支持的,解释器不懂中国话,我们要把中国话编码成为4个字节32位的 ,只能当成一段字面文字,但是不能当做 变量名称。解释器就当成一段乌拉哇啦的话。不解释,不语义分析。

2.2 深入理解

但是如果仅仅是存储,那还好,问题是,至少要显示在屏幕上吧。这就麻烦了。显示出来的过程是这样的,比如曹县,特别喜欢举牌子,计算机cpu读到一个字符,其实是读到代表这个字符的一个数字,指挥员根据数字,再查一下表就知道了,应该把哪块牌子举起来。你们就看到相应的字符了。这就是编码code。一定记住,不是encode和decode。

128个数字 就表示了所有英文,127个牌子就可以显示所有文字了,连控制字符都有了,比如某一个数字,指挥员看到之后,不举牌子,高喊三声伟大,或者表示,我从下一行开始举牌子了。

但是十几万个中文怎么办,需要1 到100000个数字吧。度多少块也就是3位数 搞定所有英文, 7位数才能搞定中文。

如果二进制呢?8位数搞定所有英文,但是 16位数才能搞定中文。

这就是编码code。一定记住,不是encode和decode。

但是 unicode 是个美好的幻想。人类的所有字符都是用一套数字来表示。汉字也在某一个区间里面。美国人不同意了,你这太浪费了。

压缩格式应运而生,utf-8特点是应用某种规则,就能把所有字符全部专为8位数搞定的。

能把unicode 转化成为和ascii单字符宽度8字节相同的一种编码格式。# -*- coding: utf-8 -*-

unicode 是一种编码体系 就是unicode

ascii 是一种编码体系 由于是系统默认就是str

美国造了一辆火车轨道宽度是8位,用的很好,中国必须要16位宽的火车才行。怎么办。聪明人想到了一个办法,把中国的16位宽度的火车拆成两个8位的车厢,放到8位轨道上跑。根据车厢的不同,有的就是直接为一个,有的拆成3个,有的拆成4个,同时保证能拆,能装,等到了站,还能组装成16位宽的车厢,不会错乱。这就是utf-8 Unicode Transformation Format 全编码变形(转换)8位格式。

2.3 怎么用呢?

我们输入中文的时候,解释器是美国人不懂中文啊,但是他能听得懂这是音符啊,所以他也能模仿出来对不对,这就行了。最常见的办法就是拆成符合英文习惯的8位,这就可以存放的。但是只能拆装,比如组装起来输出一下是可以的。但是无法处理啊对不对,序列已经变得不随机了,有的是1个,有的是3个。怎么办?

转化为unicode编码,这个时候使用unicode的字符串来存储,就可以使用和前面的str,一样的序列操作来操作了。当我们处理完了之后,如果需要传输,或者只要确保不把一整段的字符串内部序列变化,就又可以拆装,压缩成utf-8格式的,能和str一起用的格式。

3. 列表

字符串是一种序列,序列有两种,一种是可变的一种是不可变的。不可变的就比如字符串,tuple元组 xrange生成器。 而可变的包括列表 bytearray list

特点就是有序。

比如 常用的list。[],里面用逗号分隔。

3.1 合并 乘法

a= [1] + [‘a’]

3.2 切片

a=[1,2,3]

b = [1,2]

3.3 查找 长度

a.find(1) a,rfind(1)

3.4 修改,删除 附加

a[1] = ‘b’

a.remove(‘b’)

a.append(‘b’)

那我们已经学习了python的字符串和序列处理方法,能干什么用处呢?坦白说在一开始录音频的时候,我也不知道,我只想着先把知识点说完,看看能干什么,我就一直想着,字符串,文字,字符串,文字,慢慢的。就在结束的那一刻,突然有两个字出现在我的脑海中,文章,紧接着,我就想到了一个我以前想做但是一直没有做的事情。我要把一个人的话全部搜集整理出来,谁的话呢?贾宝玉,从哪里呢?红楼梦。红楼梦那是中文前无古人,后不知道有没有来着的巅峰之作,内行人都知道,曹雪芹擅长从语言表现人的性格,一开口就知道这个人是谁,性格,地位,目的交代的清清楚楚,而且百人百词,同样的话,两个人说就有一两个字的区别,对谁说有区别,什么时机说又有区别,却又恰当好处的体现出了此时此刻人物的关系。中文的运用,曹雪芹绝对的已经出神入化了。一句话包含多少心思机巧,爱恨情仇啊。比如说,红楼梦里面脏话少没得说吧,塑造的人物黛玉那是曹雪芹心里最干干净净的姑娘了吧,但是她确实为数不多 4,5个人吧,骂过别人放屁的人其中之一,骂谁呢?你们猜一猜看,宝玉。一个遇到谁都礼让退让,把自己压抑到极致的女孩子,只有在她爱的宝玉面前,能够骂出这个词,通便下来,你能感受黛玉对宝玉的信任到什么程度了吧,也就能想到后面宝玉和薛宝钗成亲对她造成了多大的打击了?

首先是预处理,我们使用文本编辑器,把换行符全部替换掉,再用结束引号,替换成为引号加上换行符。就准备好了。把文本存储好,名字就叫红楼梦.txt。

打开文件的函数叫做

由于文本太多,我们一行行的进行处理,

所有的值,以

问:“

道:“

说:“

叫:“

叹:“

”结束

从 :“向前移动如果有标点符号之间,表示说话的人,如果出现宝玉则使用。

换行

gem_talkers=[]

gem_talks=[]

file = open('/Users/henry/Downloads/红楼梦.txt')

for line in file.readlines():

u_line = unicode(line,'utf-8')

colon_index = u_line.rfind(u':“')

if colon_index > -1 :

talker = u_line[:colon_index]

for sign in reversed(talker):

if sign in [u',',u'?',u'。']:

talker = talker[talker.rfind(sign)+1:]

if talker.rfind(u’宝玉’) > -1:

talk = u_line[colon_index:]

gem_talks.append(talk)

gem_talkers.append(talker)

file.close()

for i in range(0,len(gem_talks)):

print unicode(i) + u' ' + gem_talkers[i].strip() + gem_talks[i].strip()

print

pass

配合音频,边听边看效果更好哦!点击这里『听学编程之Python』

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值