“测一测你的性格”小案例学习python字符串操作

阅读: 24 发表于 2019-06-16 19:55

 


这是树哥讲python系列的第五篇文章。

我们有的时候很关心我们自己的性格,大多数实现方式就是通过我们的属相、星座来实现这一点。今天树哥也尝试用python做一个“性格测试小程序”,用这个案例来说明一下python的日历和字符串操作的一些用法。

一、案例分析

案例

题目:让用户输入出生年月日,返回这是这一年的第几周第几天,并输出当周的日历。

给出用户的属相

给出用户的星座,并告知用户的性格。

分析:

在这个案例中,我把两个不同的事情捏合在一起,一个是和星期相关的功能使用,另外一个是用户属相和星座内容。

星期是第几周和当周的日历,采用相关的库的应用即可,比较简单。

判断用户的属相和星座,并把相应的文字描述推送出来。

在这里,我们可以先把它拆分成两个程序,第一个程序只实现第一个功能:

实现第几周第几天和当周所在月历

用到isocalendar:返回(ISO year, ISO week number, ISO weekday)元组。

calendar.month(月份、日期)调取相关日历

这样,这段程序就可以写成如下:

image.png

在这里需要导入calendar和datetime两个库。

ww1 = datetime.date(yy,mm,dd).isocalendar[1]

用这条语句吗,就可以获得输入日期所在的周号,当然下一条指令就获得了输入日期所在的周的第几天。

print(calendar.month(yy,mm))

输出为输入月份的日历。整体的执行情况如下:


实现查看属相

我们先看生肖,查询年份生肖有个简单的方法,就是通过年份-1972年(因为1972属鼠)除以12的余数,就是生肖的排序。那么这就是两条语句:

zodiacs = [ '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊','猴', '鸡', '狗', '猪']

n = int(yy-1972) % 12

这里的n是年份-1972除以 12的余数,例如余数为0,则属相属鼠。

那么这段代码则为:

image.png

实际执行后的情况为:


实现查看星座,并展示星座

查看星座的原理和生肖的有点点像,只不过生肖是按照年份,而星座是按照月份。最关键的一点,星座还不是整月分割,所以就会麻烦一些。

需要一致的是:需要有存储各个星座的数组,如下:

("摩羯座","水瓶座","双鱼座","白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座")

不一致的是有特殊的日期,就把这些分割星座的特殊日期也全部列出来:

(20,19,21,20,21,22,23,23,23,24,23,22)

这意味着,如果是1月的话,在第一个数字20日之前的就是魔蝎,之后的便是水瓶座。如果是2月的话,在第二个数字19日之前的就是水瓶,之后的就是双鱼。

可以通过量条语句来实现这一点:

if dd<d[mm-1]:

return c[mm-1]

else:

return c[mm]

也就是说:得到的日期数据小于某个月份减1的那个数字,例如3月份,那么就是小于d【2】的这个数字,从0开始数是第三个数字21,如果小于21则从星座数组中取值第三个双鱼座,如果大于等于21则取值第四个,也就是c【3】的白羊座。

实现了这个,就很容易实现把相应的性格文本数据输出出来。整体的程序如下图:


程序的执行结果如下图:


这三段程序可以合在一起,也可以单独分开。请大家尝试自己输入一遍,感受一下输出结果。有一些输出格式不是很好理解,我们在这篇文章的下半半部分详细说明。

二、字符串操作及字符串格式

字符的种类

一般所谓的字符串的操作包含字符串的转换和字符串的一般操作,例如分片、组合、查找等等。

字符串的转换就是指一种字符类型转化成别的字符串类型。那么,一般有几种字符类型呢?

字符类型的核心问题就是编码问题。

所谓编码就是在计算机内部定义字符对应的码。

ASCII编码 英文和一些常见符号的编码,共有127个。

GB2312编码 利用中文汉字进行的一套编码。

其他各语言编码 其他国家使用自己语言进行的计算机编码。

Unicode编码 所有字符都进行编码的计算机编码。

从上面可以看到的各个编码都有一个发展的过程,简单来说:

最早出现的ASCII以英文字母和一般符号为原型进行了编码。

中国人也要使用计算机,所以汉字就被以GB2312方式进行编码。

其他国家的人民也同样要使用计算机,所以各种语言版本编码出现。

大家一看,各种冲突和乱码会出现,干脆弄一个全球统一的编码标准:Unicode,把能想到的字符都编码进去。

不过,这又出现问题了,各种符号所需要的编码位数其实不同,例如汉字就需要4个字节,英文可能需要一个字节就够,那么如果都用4个字节,就浪费了很多存储空间。所以,Unicode的优化方案就出现了:UTF-8编码

UTF-8叫做可变长编码,把Unicode字符根据不同的数字大小编码成1-6个字节,也就是说可以是一个字节,也可以是6个字节。

这样,UTF-8编码就兼顾了全面和效率两方面的优点。

在python3中字符串是以Unicode进行编码,这也就我们说python可以识别中文的原因,当然,其他国家的语言也都可以识别。

在python中提供了ord和char用来寻找字符和Unicode的对照关系。用法如下:


字符串的操作

一些常见的操作也比较简单,如下:

x+y 连接两个字符串 “你”+“好”=“你好”

n*x n个x

x in S x是不是在S中 也就是在S中寻找x

几个操作演示情况如下图:


几个常用的字符串处理函数:

len(x)求字符串长度 length

str(x)转化为字符串类型 与eval相反

hex(x)或oct(x)变换成十六进制或八进制

他们的操作演示如下:

image.png

还有两个函数上面介绍过了,一个是chr一个是ord用于与Unicode编码之间相互转换。

chr(u)unicode编码变字符

ord(x)字符变unicode

几个常用的字符串操作方法

str.lower或str.upper 大小写转化

str.splite 拆分字符串

str.count(sub) 返回sub出现次数

str.replace(old,new)字符串替换

str.center(宽度)字符放在中间

str.strip(chars)去掉左右字符

str.join(分隔符)用分隔符

这几个方法的使用示例为下:

image.png

字符串的格式化

在python中提供了对字符串的格式化方法,format。用起来也比较简单。

"{},{},{}".format("a","b","c")

把format中的三个参数依次填入前面的槽中。执行的情况如下:

image.png

在这个案例中,结果是acb,这是因为在{} 的这个槽中填写了0,2,1。也就是说把后面的参数按照第1个,第3个,第2个填入槽中。

在槽中,还可以使用各种格式化命令,用于明确当前槽的格式。我们之前有一个一个案例是 :.2f 。就是说当前槽内存储的是小数点后2位的浮点数。具体一些规定如下图:

image.png

执行结果如下图:


总结:因为计算机的不断发展,就有了不同的字符编码方式,所以字符串处理是计算机编程语言中一个重要的部分,这篇文章通过一个“测性格”小程序来描述一下对字符串处理的一些方法和手段,还不完善。更加详细的方式我们之后再详细描述。

热点推荐

最新发布

友情链接