【测验8 编程题】: 程序设计方法学 (第8周)

第一题 英文字符的鲁棒输入

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误。

输入输出示例

仅给出输出格式示例,非正确答案。

输入 输出
*&^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期)】课程,如有侵权,立删。

你可能感兴趣的:(Python)