python点阵显示数字_程序点滴001_Python模拟点阵数字

程序点滴001_Python模拟点阵数字

尝试过很多编程语言,写过不少程序(当然,基本上都是些自娱自乐或给自己用的工具类的小玩意儿),逐渐认识到编写程序是一个不断完善、不断优化的过程——编程首先要有一个想法(目标),围绕这个目标形成最基本的功能逻辑,测试证明功能有效之后就算目标基本实现了。随后,可以扩展基本功能的应用领域,加强程序的容错能力和交互性,逐渐形成一个更完善更健壮的程序。以下通过一个小例子来对此过程稍作展示:

在计算器上、电梯上、LED 显示屏上,都可以看到用点阵表示的数字

ab7653affab982b574eb7acc55df2e04.gif

这里,我们尝试用 Python 来模拟点阵数字,简而言之,就是把数字放大(^_^)

一、设计点阵数字的显示效果

为了简化,我们这里只考虑 0~9 这十个阿拉伯数字,每个数字点阵都是 5 行 4 列,在 Python 中可以用 tuple 来表示。(在设计点阵字模的过程中,你也可以体验一下当美工或字体设计师的感觉,@_@)。在 Python 中,这个过程很简单(以下仅以 0,1 两个数字为例)。FONTCOL=4

FONTROW=5

zero=(" ** ",

"* *",

"* *",

"* *",

" ** ")

one=(" * ",

" ** ",

" * ",

" * ",

" ***")

二、 测试输出效果

为了考察数字点阵的输出效果,也为了验证将来的输出逻辑,可以用一段最简单的程序把所有字模输出。功能逻辑很简单:

a. 对于一个序列中的每个数字,找到其对应字模,输出该字模的第一行,空一格;然后输出下一个数字对应字模的第一行,空格,直到全部数字对应字模的第一行都已输出

b. 继续依次输出每一行,直到结束(在本程序中是 5 行,即 FONTROW)

完整程序:importsys

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

whilei

col=0

whilecol<10:#此处输出全部字模,共计10个

print(digits[col][i],end=" ")

col+=1

print("")#换行,输出字模下一行

i+=1

输出效果:

ab7653affab982b574eb7acc55df2e04.gif

三、优化和完善 1——根据输入的不同,显示不同的输出

通过 argv 读取输入参数(即用户想要显示的具体数字),若用户未提供参数,则提供使用说明和示例输出

这里就可以把上面用到测试输出代码稍作调整,形成一个函数 show_numbers。(注意其 print 部分有小调整)

核心代码:importsys

FONTCOL=4

FONTROW=5

#以下构建数字点阵

#略

digits=(zero,one,two,three,four,five,six,seven,eight,nine)#将所有数字字模合成一个元组

defshow_number(nums):

i=0

whilei

col=0

whilecol

print(digits[int(nums[col])][i],end=" ")

col+=1

print("")#换行,输出字模下一行

i+=1

defshow_usage():

print("请在程序名之后提供15个数字以内的整数")

print("程序名.py 0123456789")

show_number('0123456789')

iflen(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:

iflen(sys.argv)==2:

iflen(sys.argv[1])<16:

show_number(sys.argv[1])

else:

show_usage()

else:

show_usage()#如果未提供参数或提供的参数过多,则输出使用说明

exceptValueError:

print("\n\n未能正确显示全部信息!!——出现了非数字的字符!\n")

show_usage()

来源: http://www.cnblogs.com/wen2cheng2ge/p/6488886.html


版权声明:本文为weixin_39953845原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。