温度的刻画有两个不同体系:摄氏度(Celsius)和华氏度(Fahrenheit)。
请编写程序将用户输入华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度。
转换算法如下:(C表示摄氏度、F表示华氏度)
C = ( F - 32 ) / 1.8 F = C * 1.8 + 32
要求如下:
(1) 输入输出的摄氏度可采用大小写字母C结尾,温度可以是整数或小数,如:12.34C指摄氏度12.34度;
(2) 输入输出的华氏度可采用大小写字母F结尾,温度可以是整数或小数,如:87.65F指华氏度87.65度;
(3) 输出保留小数点后两位,输入格式错误时,输出提示:输入格式错误;
(4) 使用input()获得测试用例输入时,不要增加提示字符串。
Tempstr = input("")
if Tempstr[-1] in ["F","f"]:
C = (eval(Tempstr[0:-1]) - 32)/1.8
print("{:.2f}C".format(C))
elif Tempstr[-1] in ["C","c"]:
F = eval(Tempstr[0:-1])*1.8+32
print("{:.2f}F".format(F))
else:
print("输入格式错误")
1. 字符串切片Tempstr[0:-1]
python中,变量声明和赋值可以直接用"变量名=输入内容"来完成,而变量类型则默认为字符串,按示例:87.65F输入后,Tempstr的值可以理解为"87.65F"
字符 | 8 | 7 | . | 6 | 5 | f |
索引 | 0(-6) | 1(-5) | 2(-4) | 3(-3) | 4(-2) | 5(-1) |
如上表,Tempstr[0]对应"8",而Tempstr[-1]对应"f"。
此时我们会疑惑:为何是Tempstr[0:-1]而非Tempstr[0:-2]呢?其实在python的字符串切片操作中,[a:b]是一个左闭右开区间,包含a而不包含b。所以Tempstr的结果为字符串"87.65"。
2.eval()易错点
eval() 函数是我们在编程过程中容易犯错的一个点。请注意上课时老师所讲的:"eval()将最外侧的引号去掉并执行"。这里我们需要注意的是,eval()会检测括号内字符串的最外端,并去除被检测到的引号。
如果把程序写作eval(input()*2),假设输入"36.5",则程序不会返回我们想要的值73,而是报错,退出运行。因为此时eval函数并没有在字符串的最右端,也就是2的位置检测到任何引号(可以这样理解),此时eval内部的字符串为:36.5"*2,很明显这是一个不能运行的语句。
正确的写法应为:eval(input())*2