增强程序可用性——关于程序的用户错误输入的处理

前言

  今天的计导课上,老师让我上台完成他上一次布置的作业——用Python判断一个三位数是否为水仙花数。这道题目其实非常简单,用Python 3.6实现如下:

num = int(input('请输入一个三位数:'))
a = num // 100          #百位
b = num // 10 % 10      #十位
c = num % 10            #个位
if(num == pow(a,3) + pow(b,3) + pow(c,3)):
    print("%d是水仙花数" %num)
else:
    print("%d不是水仙花数" %num)

  下面给出两组输出样例:

请输入一个三位数:123
123不是水仙花数
请输入一个三位数:153
153是水仙花数

  当我以为这道题就这么讲完了的时候,老师突然提出了一个新的问题:当用户输入的不是一个三位数的话该怎么处理呢?确实,如果想要编写出一个可用性较强的程序,我们必须要创建一个更友好的用户界面。这样的界面会使交互式的数据输入更轻松,并且减轻了用户错误输入的影响。

初步实现

  老师又叫了一个同学上去修改这个程序。这个同学修改后的程序如下:

num = int(input('请输入一个三位数:'))
if not(num in range(100,1000)):
    print('输入错误!')
else:
    a = num // 100          #百位
    b = num // 10 % 10      #十位
    c = num % 10            #个位
    if(num == pow(a,3) + pow(b,3) + pow(c,3)):
        print("%d是水仙花数" %num)
    else:
        print("%d不是水仙花数" %num)

  下面给出一组输入错误的输出样例:

请输入一个三位数:1234
输入错误!

  这样修改程序之后确实达到了老师的要求——提示用户输入错误。课堂上关于这一问题的讨论也就到此为止。然而,不可否认的是,修改过后的程序虽然加强了容错性,但它仍旧是个可用性不强的程序。这体现在两个方面:第一,程序只可以进行一次水仙花数的判断,用户想要再一次进行判断的话需要重新Run Module;第二,假使用户不慎输入错误,没有输入一个三位数,那么程序也会就此结束,不会给用户重新输入的机会。针对这两点问题,我们又该如何改进呢?

改进——创建更为友好的用户界面

  对于上面所说的第一个问题,我们可以给程序加上一个while True:的无限循环。想要终止这个程序的话,我们只需要按Ctrl+C键。当然,更好的做法是在程序的最后加上一个if判断语句:如果用户输入“Y”的话,程序会继续下一次的运行;如果用户输入“N”的话,程序结束运行。
  第二个问题又该如何解决呢?我在第一时间想到的是while循环,如果用户输入错误的话,程序执行while循环,并给用户重新输入的机会。不过,由于刚开始有些大脑短路,我并没有将这一想法用代码来实现,实在是有点蠢……
  最终用Python 3.6实现如下:

while True:
    num = int(input('请输入一个三位数:'))
    while(num not in range(100,1000)):
        num = int(input('输入错误,请重新输入:'))
    a = num // 100          #百位
    b = num // 10 % 10      #十位
    c = num % 10            #个位
    if(num == pow(a,3) + pow(b,3) + pow(c,3)):
        print("%d是水仙花数" %num)
    else:
        print("%d不是水仙花数" %num)
    j = input('您是否想要继续?(Y/N)')
    while(j != 'Y' and j != 'N'):
        j = input('输入错误,请重新输入:')
    if(j == 'Y'):
        continue
    else:
        print('再见!')
        break

  下面给出一组详细的输出样例:

请输入一个三位数:1234
输入错误,请重新输入:123
123不是水仙花数
您是否想要继续?(Y/N)Y
请输入一个三位数:153
153是水仙花数
您是否想要继续?(Y/N)Y
请输入一个三位数:100
100不是水仙花数
您是否想要继续?(Y/N)M
输入错误,请重新输入:N
再见!

  显然,这样改进之后,我们用代码成功地实现了“创建更为友好的用户界面”的想法。

写在最后

  有这样一句话:程序的核心部分往往只占20%,其余的80%都是为了增强它的容错性和可用性。我们学习编程也有一段时间了,在设计程序的时候,我们又是否考虑过程序的可用性呢?我想,大部分人应该都不会去想这个问题,或者是想到了这个问题却又没有用代码来实现。从今天开始,我们是不是应该要思考一下,如何让自己的程序对使用者更为友好呢?
  如果有什么想法的话,欢迎联系我,我期待着你们的留言!
  我的邮箱:[email protected]

发布了21 篇原创文章 · 获赞 6 · 访问量 1669

猜你喜欢

转载自blog.csdn.net/qq_45554010/article/details/102924128