第一题 英文字符的鲁棒输入
描述
获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误。
输入输出示例
仅给出输出格式示例,非正确答案。
输入 | 输出 |
---|---|
*&^123abc0e | abce |
解答代码
思路:一开始自己直接手动输入26个字母,存为集合,然后进行判断。参考答案后,进行改进如下。
# 英文字符的鲁棒输入
chars = set()
# 生成26个字母的大小写,并存为集合
for i in range(26):
chars.add(chr(ord('a') + i))
chars.add(chr(ord('A') + i))
s = input()
for i in s:
if i in chars:
print(i, end='')
第二题 数字的鲁棒输入
描述
获得用户输入的一个数字,可能是浮点数或复数,如果是整数仅接收十进制形式,且只能是数字。对输入数字进行平方运算,输出结果。
要求:
(1)无论用户输入何种内容,程序无错误;
(2)如果输入有误,请输出"输入有误"。
输入输出示例
以下是一个格式示例,不是最终结
输入 | 输出 |
---|---|
1+2j | (-3+4j) |
abd | 输入有误 |
解答代码
思路:自己一开始用了三个try…excep去判断整数、浮点数、复数三种情况。后来参考答案后,发现参考答案简单很多。
这里的坑在于:不能直接使用eval(),否则,用户可以通过输入表达式(如100**2)输入数字,与要求不同(在实际应用中带来安全隐患)。
# 版本一,不够简洁
s = input()
ok = False
while not ok:
try:
n = int(s)
ok = True
break
except:
pass
try:
n = float(s)
ok = True
break
except:
pass
try:
n = complex(s)
ok =True
break
except:
pass
break
if ok:
print(n**2)
else:
print("输入有误")
# 版本二,参考答案简洁很多,只有一个try...except
s = input()
try:
if complex(s) == complex(eval(s)):
print(eval(s)**2)
except:
print("输入有误")
说明:题目来自北理嵩天老师【Python语言程序设计 (第8期)】课程,如有侵权,立删。
后记:
我从本硕药学零基础转行计算机,自学路上,走过很多弯路,也庆幸自己喜欢记笔记,把知识点进行总结,帮助自己成功实现转行。
2020下半年进入职场,深感自己的不足,所以2021年给自己定了个计划,每日学一技,日积月累,厚积薄发。
如果你想和我一起交流学习,欢迎大家关注我的微信公众号每日学一技
,扫描下方二维码或者搜索每日学一技
关注。
这个公众号主要是分享和记录自己每日的技术学习,不定期整理子类分享,主要涉及 C – > Python – > Java,计算机基础知识,机器学习,职场技能等,简单说就是一句话,成长的见证!