温度计,家里应该还都有吧!

就是长这个样子的,旁边的℃表示摄氏度(degree Centigrade),℉表示华氏度(degree Fahrenheit ),据说后者只有五个国家和地区在用。当然,还有以绝对零度为起点的开氏度(热力学温度)和兰氏度(已废弃),列氏度(冰水混合物为0,沸点为80,据说只有一个国家在用)。

手机里天气设置一般也只有摄氏度和华氏度,我们就这两个温度计量单位用Python进行转换。

要求用户输入时,按照数字+标志的格式输入,数字为整数(如:26)或浮点数(如:26.5),可以带正(+)负(-)号;标志为F或f,C或c,分别代表输入的数字是华氏度或摄氏度。

转换公式如上图。

输出结果保留小数点后两位,并把转换后的温度标志显示出来。

我们把思路整理一下,获取用户的输入,判断标志,计算转换公式,输出结果。

在获取用户输入后,根据标志判断用户输入的是摄氏度还是华氏度,按照对应的转换公式计算,输出结果;如果没有标志,提示用户按照格式输入。

第2行:我们用一个字符串变量来存储用户输入的内容;第4到8行:字符串的最后一位是F或f的话,计算从华氏度到摄氏度的转换,字符串从开始取到倒数第二个字符,也就是标志前,eval 函数是把字符串按照表达式执行,以浮点数小数点后两位输出结果;第10到14行:字符串的最后一位是C或c的话,计算从摄氏度到华氏度的转换,后同;第16到18行,如果最后一个字符不是标志位,提示用户按照格式输入。

按照设定的输入,转换都没有问题。

为了更好的用户体验,可以把提示语写的稍微多一点。

但用户刚开始绝对不会按照设定的格式输入,比如用户会输入一个回车Enter。嗯,代码崩溃了;究其原因,IndexError: string index out of range,索引错误,索引超出了字符串的范围,证明回车Enter不是(可显示)字符的一种。

因为要取用户输入的字符串最后一个字符判断标志,至少要有一个字符。针对此,我们需要加一个判断语句(上图第2行),至少用户输入的字符串要大于0不是,这样就不会出现字符串索引错误了。

有时候,用户会很调皮,把最后一位标志位输入对了,可前面没有输入数字或全是数字字符串。嗯,代码又崩溃了;Python的解释器interpreter无法通过eval函数把字符串作为表达式执行,所以出现了语法错误SyntaxError。

我们把try…except…语句加到判断标志位前后,如果出现语法错误SyntaxError(不放心的话,可以把SyntaxError去掉,任何异常错误都会输出提示),就提示用户输入的有非数字字符。至此,无论用户输入什么,代码都可以处理。

标志能在最后一位,那肯定也能在第一位;上图蓝色箭头为关键更改的地方,判断字符串的位置从-1(最后一个元素)改为了0(第一个元素)。

把判断标志语句的内容和转换公式一换,就可以变成汇率兑换的代码;请注意,判断标志位从1位增加到了3位。

结尾

框架有了,想转换什么都可以,Python办不到的就别说了。