尝试过很多编程语言,写过不少程序(当然,基本上都是些自娱自乐或给自己用的工具类的小玩意儿),逐渐认识到编写程序是一个不断完善、不断优化的过程——编程首先要有一个想法(目标),围绕这个目标形成最基本的功能逻辑,测试证明功能有效之后就算目标基本实现了。随后,可以扩展基本功能的应用领域,加强程序的容错能力和交互性,逐渐形成一个更完善更健壮的程序。以下通过一个小例子来对此过程稍作展示:
在计算器上、电梯上、LED显示屏上,都可以看到用点阵表示的数字
  
这里,我们尝试用Python来模拟点阵数字,简而言之,就是把数字放大(^_^)
一、设计点阵数字的显示效果
为了简化,我们这里只考虑0~9这十个阿拉伯数字,每个数字点阵都是5行4列,在Python中可以用tuple来表示。(在设计点阵字模的过程中,你也可以体验一下当美工或字体设计师的感觉,@_@)。在Python中,这个过程很简单(以下仅以0,1两个数字为例)。
FONTCOL=4
FONTROW=5
zero=(    " ** ",
          "*  *",
          "*  *",
          "*  *",
          " ** ")
one=(     "  * ",
          " ** ",
          "  * ",
          "  * ",
          " ***")
二、 测试输出效果
为了考察数字点阵的输出效果,也为了验证将来的输出逻辑,可以用一段最简单的程序把所有字模输出。功能逻辑很简单:
a. 对于一个序列中的每个数字,找到其对应字模,输出该字模的第一行,空一格;然后输出下一个数字对应字模的第一行,空格,直到全部数字对应字模的第一行都已输出
b. 继续依次输出每一行,直到结束(在本程序中是5行,即FONTROW)
完整程序:
import sys
FONTCOL=4
FONTROW=5
#以下构建数字点阵
zero=(" ** ",
      "*  *",
      "*  *",
      "*  *",
      " ** ")
one= ("  * ",
      " ** ",
      "  * ",
      "  * ",
      " ***")
two= (" ** ",
      "*  *",
      "  * ",
      " *  ",
      "****")
three=(" ** ",
       "*  *",
       "  **",
       "*  *",
       " ** ")
four= ("  * ",
       " ** ",
       "* * ",
       "****",
       "  * ")
five= ("****",
       "*   ",
       "****",
       "   *",
       "****")
six=  (" ** ",
       "*   ",
       "*** ",
       "*  *",
       " ** ")
seven=(" ***",
       "*  *",
       "  * ",
       "  * ",
       " ***")
eight=(" ** ",
       "*  *",
       " ** ",
       "*  *",
       " ** ")
nine= (" ** ",
       "*  *",
       " ***",
       "   *",
       " ** ")
digits=(zero,one,two,three,four,five,six,seven,eight,nine) #将所有数字字模合成一个元组
i=0
while i<FONTROW:
    col=0
    while col<10: #此处输出全部字模,共计10个
        print(digits[col][i],end=" ")
        col+=1
    print("") #换行,输出字模下一行
    i+=1
输出效果:
  
三、优化和完善1——根据输入的不同,显示不同的输出
通过argv读取输入参数(即用户想要显示的具体数字),若用户未提供参数,则提供使用说明和示例输出
这里就可以把上面用到测试输出代码稍作调整,形成一个函数show_numbers。(注意其print部分有小调整)
核心代码:
import sys
FONTCOL=4
FONTROW=5
#以下构建数字点阵
#略
digits=(zero,one,two,three,four,five,six,seven,eight,nine) #将所有数字字模合成一个元组
def show_number(nums):
    i=0
    while i<FONTROW:
        col=0
        while col<len(nums): #此处输出全部字模
            print(digits[int(nums[col])][i],end=" ")
            col+=1
        print("") #换行,输出字模下一行
        i+=1
def show_usage():
    print("请在程序名之后提供15个数字以内的整数")
    print("程序名.py 0123456789")
    show_number(‘0123456789‘)
if len(sys.argv)==2:
    show_number(sys.argv[1])
else:
    show_usage()#如果未提供参数或提供的参数过多,则输出使用说明
四、优化和完善2——对输入进行检查
以上代码已经可以应付基本需求了,但对于用户的错误输入没有抵抗能力。我们计划从以下几个方面进行优化:
a. 限制用户的最大输入字符个数
在DOS界面,一行最多显示80个字符,字模每个占4字符,字模间有1字符空格,在考虑行尾的换行符,所以我们一次最多允许输入80/(4+1)-1=15个数字。
b. 限制用户只能输入阿拉伯数字
如果用户误输入非数字信息,如英文字符等,则int()函数会报 ValueError,抓住这个Error并做提示
调整后的程序:
try:
    if len(sys.argv)==2:
        if len(sys.argv[1])<16:
            show_number(sys.argv[1])
        else:
            show_usage()
    else:
        show_usage()#如果未提供参数或提供的参数过多,则输出使用说明
except ValueError:
    print("\n\n未能正确显示全部信息!!——出现了非数字的字符!\n")
    show_usage()
原文:http://www.cnblogs.com/wen2cheng2ge/p/6488886.html