查看原文
其他

正则实战秘籍进阶-【温度转换小程序】

2017-01-18 菜鸟学python 菜鸟学python

这是菜鸟学python的第47篇原创文章


阅读本文大概需要5分钟


前面讲了很多正则表达式的知识,上一篇也实战操作了一个关于字符串和时间处理的例子,很多同学觉得不过瘾,今天我们讲一个稍微复杂一点,并且是一个完整的实际应用的例子,温度转换小程序


需求:写一个小程序来获取用户的输入

若输入的摄氏温度就转换成华氏温度

输入的华氏温度转换成摄氏温度

 

这个程序比较有趣而且容易上手,那么如何用正则来处理呢,下面我们由浅入深来分析一下这个问题


 Step1:
我们先获取用户的输入,然后判断一下

1).我们先假设用户输入的都是整数温度(先从最简单的入手吧)

2).比如用户输入的是1位或者2位的整数

3).若正确就转换一下温度


>>

22

Your input celsius temperature :22

match temperature :22

fahrenheit temperature :71



 Step2:
但是实际情况下温度是带小数的,而且最多2位小数

1).所以在正则的判断上要改一下,而且要用浮点数

2).注意同时还要能继续匹配不带小数的情况



若输入带3位小数的温度

>>

22.223

match temperature :22.22

71.996


若输入1位整数的温度

>>

9

match temperature :9

48.2



 Step3:温度有零上也有零下,而且还可能是0度

我们继续分析改代码

1).温度有零上也有零下,可以在前面加+表示零上,-表示零下

2).温度也为0度的时候,所以第一个数字匹配从[0-9]



>>

-12

Your input celsius temperature :-12

temperature:-12

fahrenheit temperature :10.4



 Step4:

识别用户输入的是摄氏还是华氏温度,要用户结尾加C或F区分

1),先分析出用户输入的C/F,比如

celsius='-9.5C'

patt=re.compile(r'[-+]?[0-9][0-9]?(\.[0-9][0-9]?)?([CF])')

我们在上面的正则的最后加一段[CF]表示输入的可以是C也可以是F


2),我们要把[CF]用括号括起来,然后用groups()来获取,用来做温度类型判断

同时也要把[-+]?[0-9][0-9]?(\.[0-9][0-9]?)?括起来,因为要取前面的温度数字

celsius='-9.5C'

patt=re.compile(r'([-+]?[0-9][0-9]?(\.[0-9][0-9]?)?)([CF])')

m=re.search(patt,celsius)

if m:

        print m.groups()

        print m.groups()[-1]

>>

('-9.5', '.5', 'C')


也就是说我们可以根据元组的最后一个元素来判断到底是C还是F,第一个元素来得到温度数值


3).问题来了,'-9.5'里面的'-'怎么办,温度转换需要数字啊,不急很简单

有万能的eval函数

celsius='-9.5C'

patt=re.compile(r'([-+]?[0-9][0-9]?(\.[0-9][0-9]?)?)([CF])')

m=re.search(patt,celsius)

if m:

print m.groups()

print m.groups()[-1]

temp_str=m.groups()[0]

print eval(temp_str)


>>

('-9.5', '.5', 'C')

C

-9.5



 Step5:

好经过前面的4步已经万事俱备了,可以完成代码了


1).我们只需要在前面的基础上把用户输入的温度,分成数字和温度类型

2).若是摄氏温度:

计算一下转成华氏温度

fahrenheit=(float(temperature)*9/5)+32

3).若是华氏温度:

计算一下转成摄氏温度

celsius=(float(temperature)-32)*5/9


  • 是不是很简单哈,大家可以试着写写, 希望通过这个例子大家可以更快更灵活的掌握正则表达式的妙用

  • 同时把前面的知识也连贯起来

  • 需要源码的同学也可以后台跟我咨询



好了Python中的正则表达式实战进阶就讲到这里啦,希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流.

最后说一下,原创真的不易,欢迎转发转发转发,留言留言留言,重要的事情说三遍,也是对我的一点鼓励和动力.

也欢迎更多喜欢Python的同学关注 菜鸟学python,一起来学python吧 长按下方的二维码即可关注.




"欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧



正则相关文章

如何入门Python的正则表达式

破解谜一样的正则表达式,从这9招开始

正则实战秘籍分享-学会了能让1小时的工作变成3分钟






来源 | 菜鸟学Python

作者 | xinxin

本文章为菜鸟学Python独家原创稿件,未经授权不得转载




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存