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

在计算器上、电梯上、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

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

col=0

while col

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()

python点阵显示数字_程序点滴001_Python模拟点阵数字相关推荐

  1. java 魔鬼数字_程序中的魔鬼数字

    在代码中使用魔鬼数字(没有详细含义的数字.字符串等)将会导致代码难以理解,应该将数字定义为名称有意义的常量. 将数字定义为常量的终于目的是为了使代码更easy理解,所以并非仅仅要将数字定义为常量就不是 ...

  2. matlab编写识别手写数字_使用PYNQ搭建手写数字识别工程小白级说明(完整版)

    距离上次pynq的基础设置一文已经过去蛮久了,难得还有人催我更新233那么今天就再来把玩一番.今天要做的事情是用pynq来搭一个数字识别的工程. 在正式开始介绍工程之前,让我花一点篇幅简单说下pynq ...

  3. c++ascii码转换为数字_在C++中将字符串转换为数字

    有许多情况需要将数字转换为字符串或将字符串转换为数字.本文中提到了一些实现此任务的方法. 将字符串转换为数字 方法1:使用stringstream类或sscanf() 方法2:使用stoi()或ato ...

  4. python输入n个数、输出最小的数字_程序查找最少的斐波纳契数以在Python中加到n?...

    假设我们有一个数字n:我们必须找到加n所需的最小斐波纳契数. 因此,如果输入像n = 20,那么输出将为3,因为我们可以使用斐波那契数[2,5,13]求和为20. 为了解决这个问题,我们将按照以下步骤 ...

  5. python怎么显示分数_在Python中使用分数

    我在这里使用类来输入一个分数(当给定分子和分母时),以及将两个分数相加和相乘.出于某种原因,导入的分数模块只对程序的一部分正确工作:gcd方法工作,但是分数方法(当给定两个数字时,放入分数格式)不工作 ...

  6. python 5的倍数_查找所有低于1000的数字的和,这是Python中3或5的倍数

    python 5的倍数 Sometimes, we need to find the sum of all integers or numbers that are completely divisi ...

  7. python 电脑显示桌面_使用Python快速实现显示器关闭和锁住桌面

    现在很多公司都需要考虑节能,特别对电方面的节能.因此很多公司都针对电脑进行管理,比如当你离开电脑时,需要把显示器处于关闭状态,同时让电脑处于锁定状态,这样有利于节能,同时也能延长电脑显示器的寿命,同时 ...

  8. python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现

    继续我们的目标检测算法的分享,前期我们介绍了SSD目标检测算法的python实现以及Faster-RCNN目标检测算法的python实现以及yolo目标检测算法的darknet的window环境安装, ...

  9. python做数据处理软件_程序员用于机器学习编程的Python 数据处理库 pandas 入门教程...

    入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据( ...

最新文章

  1. db2表结构导出导入,数据库备份
  2. 从X86向X64迁移的一点心得
  3. 【每周CV论文推荐】 初学高效率CNN模型设计应该读的文章
  4. C数据类型之基本类型
  5. SAP Spartacus加载delivery region的实现
  6. 多线程程序中操作的原子性
  7. windows10把单独文件固定到开始屏幕
  8. matlab中asix off_遗传算符MATLAB程序-入门必看
  9. Discuz!客户端api开发(一)
  10. 基于友善的superboot 移植linux内核到tiny210(s5pv210)上
  11. 互联网电商数据分析常用的指标
  12. R数据分析:竞争风险模型的做法和解释二
  13. RHEL5下nginx+php+mysql+tomcat+memchached配置全过程
  14. 【原创】自制操作系统知识储备(一)---流程篇
  15. java生成不重复8位数字_生成8位随机不重复的数字编号
  16. python绘制三维地形_三维数字场地模型(上篇):Civil3D 地形的生成
  17. APP消息推送方案调研
  18. 如何定义一个高逼格的原生JS插件
  19. 你见过哪些目瞪口呆的 Java 代码技巧?
  20. google论文--mapred中文翻译

热门文章

  1. Interaction triggers in WPF
  2. 掌上智维隐私政策privacy
  3. ag-grid 学习
  4. Unity3D学习之路Homework4—— 飞碟射击游戏
  5. 局域网下微信无法连接到服务器,微信无法连接到服务器怎么办
  6. 快速排序深度优化详解
  7. Java学到什么程度才算精通?(2),学海无涯
  8. php画奥运五环颜色,php趣味 - php 奥运五环
  9. 任天堂游戏服务器系统,传闻:任天堂正在替换用了18年的多人服务器系统
  10. 如何把新加的分区挂载到/根目录