(原题:https://www.python123.io/student/courses/934/groups/8102/problems/programmings/6078)

Solution:

#方法一:异常处理与if单分支结合
n = input()
try:
if ("C" in n) or ("c" in n):
n = n.strip("Cc") #将字符串n的首尾的C与c全部去掉,实际上只需去掉末尾,但不影响
F = eval(n)*1.8 +32
print("{:.2f}".format(F)+"F") #或print("{:.2f}F".format(F))
else:
n = n.strip("Ff")
C = (eval(n)-32)/1.8
print("{:.2f}".format(C)+"C")
except:
print("输入格式错误")
#方法二:if-elif-else多分支与字符串切片(截取片断)结合
n = input()
if n[-1] in {"C","c"}:
n= n[0:-1]
F = eval(n)*1.8 +32
print("{:.2f}F".format(F))
elif n[-1] in {"F","f"}:
n = n[0:-1]
C = (eval(n)-32)/1.8
print("{:.2f}C".format(C))
else:
print("输入格式错误")

Notes:

(1)else在二分支、多分支中,为了把各中情况都考虑周全,有良好的用户体验,最好写上,否则虽然不满足前面那些条件,程序也不会报错,但也没有任何提示。执行时看起来像是程序没反应一样

(2)方法二中,因为else已经对用户不符合要求的输入进行了处理,所以不需再用try-except。因为这个只有在程序出现错误的时候才会执行except中的语句,报出相应的错误。如果程序不出错,即便不满足要求,也不会执行,画蛇添足。如:

执行结果:

即所有不正确的输入,都执行else语句,而不是except语句。

由此,可不可以去掉else,用except来替代呢?答案是否定的。如下:

n = input()
try:
if n[-1] in {"C","c"}:
n= n[0:-1]
F = eval(n)*1.8 +32
print("{:.2f}F".format(F))
elif n[-1] in {"F","f"}:
n = n[0:-1]
C = (eval(n)-32)/1.8
print("{:.2f}C".format(C))
except:
print("输入格式错误")

执行结果:

不报错:因为不管输入什么,程序都不会执行不了,所以异常处理时多余的

不提示:因为缺少了else对不满足条件的处理,所以不会返回任何结果

Statement:此为本人所学见解,不一定正确。如有不足之处,欢迎指正。分享随笔,一起进步

temperatureConversion1的更多相关文章

随机推荐

  1. webpack-dev-server 小记 原理介绍 概念解读

    使用 DevServer 提供 HTTP 服务而不是使用本地文件预览 监听文件的变化并自动刷新网页,做到实时预览 支持 Source Map,以方便调试 对于这些,Webpack 都为我们考虑好了.W ...

  2. 使用gets函数常见问题

    C语言面试经常会考如下一道题,哪里有错误: #include <stdio.h>    int main()  {     char string[100] = {'\0'};       ...

  3. MyBatis从入门到精通(十三):使用discriminator鉴别器映射

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解鉴别器映射discri ...

  4. ADO.NET_包括DataReader和dataSet的使用

    今天总结了一下ADO.NET编程中DataReader和dataSet两个比较重要的对象的使用,完成了combobox,listbox,以及fpSpread动态添加数据的测试,对使用sqlComman ...

  5. springboot简单入门笔记

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  6. Excel催化剂开源第11波-动态数组函数技术开源及要点讲述

    在Excel催化剂中,大量的自定义函数使用了动态数组函数效果,虽然不是原生的Excel365版效果(听说Excel2019版取消了支持动态数组函数,还没求证到位,Excel365是可以用,但也仅限于部 ...

  7. HelloDjango 启动!免费带你学Django全栈!

    欢迎 追梦 入伙 HelloGitHub-Team,同时为我们带来了完全免费的 HelloDjango 系列教程,全网首发于 HelloGitHub 公众号.让想你的系列文章被跟多人看到,那就来加入我 ...

  8. C#2.0新增功能05 迭代器

    连载目录    [已更新最新开发文章,点击查看详细] 迭代器可用于逐步迭代集合,例如列表和数组. 迭代器方法或 get 访问器可对集合执行自定义迭代. 迭代器方法使用 yield return 语句返 ...

  9. 【MySQL】(二)InnoDB存储引擎

    InnoDB是事务安全的MySQL存储引擎,设计上采用了类似于Oracel数据库的架构.通常来说,InnoDB存储引擎是OLTP应用中核心表的首选存储引擎.同时,也正是因为InnoDB的存在,才使My ...

  10. C++里long的字节数

    标准规定long的大小不小于int也就是说sizeof(long)>=sizeof(int). Numerical type sizes in C (bits) Platforms  \   T ...