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

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

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

  

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

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

  为了简化,我们这里只考虑0~9这十个阿拉伯数字,每个数字点阵都是5行4列,在Python中可以用tuple来表示。(在设计点阵字模的过程中,你也可以体验一下当美工或字体设计师的感觉,@[email protected])。在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()

  

时间: 2024-10-13 01:45:46

程序点滴001_Python模拟点阵数字的相关文章

【VC编程技巧】窗体?3.7托盘程序介绍(模拟QQ消息)

所谓的托盘程序就是运行时在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标的程序.代表它运行的图标称作托盘图标.我们可以通过使用小图标来控制应用程序的状态. (一)NOTIFYICONDATA Structure typedef struct _NOTIFYICONDATA { DWORDcbSize;//结构体大小 HWNDhWnd;//接受icon消息的窗口句柄 UINT uID;//icon图标的资源Id UINTuFlags;//标志一些成员是否有效 UINTuCallbackM

第一个racket程序:获得字符串中的数字

#! /usr/bin/env racket #lang racket #| NAME: getModelNumber.rkt This program is used to get model number based on the input model file name. USAGE: ./getModelNumber.rkt modelfilename EXAMPLE: ./getModelNumber.rkt gitst22.mat OUTPUT: 22 |# ;; deal wit

JAVA 基础编程练习题13 【程序 13 根据条件求数字】

13 [程序 13 根据条件求数字] 题目:一个整数,它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少? 程序分析:在 10 万以内判断,先将该数加上 100 后再开方,再将该数加上 268 后再开方,如果开方后的结 果满足如下条件,即是结果. package cskaoyan; public class cskaoyan13 { @org.junit.Test public void number() { int min = 1; int max = 10

湖南省第6届程序大赛第3题 数字整除

题目C 数字整除 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍.当且仅当差是17的倍数时,原数也是17的倍数 . 例如,34是17的倍数,因为3-20=-17是17的倍数:201不是17的倍数,因为20-5=15不是17的倍数.输入一个正整数n,你的任务是判断它是否是17的倍数. 输入 输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=10100),表示待判断的正整数.n=0表示输入结束,你的程序不应当处理这一行. 输出 对于每组测试

CISCO_CVoice – 002 : 模拟与数字中继

在这部分里,因为没有物理语音实验设备,无法做实验.此篇主要以整理概念为主. 语音基本概念 分类 接口 中继线 模拟 数字 模拟 数字 传统语音 FXS, FXO, E&M E1, T1 PSTN E1(2.048M), T1(1.544M) IP语音 语音的连接是建立在IP的通道之上的,信令一般有: H323,SIP,SCCP,MGCP 2.     一般连接方式 传统语音: Tel – FXS – CME --- (PSTN, TI, E1 ) --- CME – FXS – Tel //这里

输入法切换小程序(js模拟键盘按键输入成功版)

花了半天时间写了个小程序,基本满足最初需求(但目前只支持IE浏览器). 需求: 在输入汉字的时候没有切换出中文输入法而导致输入了拼音,我们要做的是:将输入的拼音删除并且切换出中文输入法,重新自动在输入法中打出相应的字母. 我的电脑上默认只有两个输入法,中文输入法和美式键盘,所以模拟出”ctrl+空格键“即可在两个输入法之间进行切换. 做的过程和想法: 最初想的是使用网页配合js来做,毕竟界面好做一些.首先想到的就是用js来模拟键盘的输入,想法很好,但是却很难,主要是因为浏览器为了考虑安全性,所以

黑马程序员——java——模拟一个字符串中的trim方法去掉一个字符串两端的空格

模拟一个字符串中的trim方法去掉一个字符串两端的空格 public class StingTrimDemo { //模拟一个trim方法, 去掉一个字符串两边的空格], public static void main(String[] args) { // TODO Auto-generated method stub String s = " my java "; System.out.println("未去空格前的字符串+++:[ "+s+" ]&q

CISCO_CVoice – 003 : 模拟与数字中继

这节主要讨论模拟语音的接口配置及信令行为. 3个概念的理解: 1.    语音接口:提供模拟中继及用户线的接入与处理,实现语音信号在数据网路中的传输. 2.    语音信令:用来控制电路行为,如呼叫建立,拆除,网络管理等 3.    语音媒体:描述通讯会话中传递信息,协商等信息 以上拓扑图为例,讨论如下问题: 实验环境中的接口连接,如上图 接口及dial-peer配置 信令行为 FXO口的"吃号"问题 FXS口的位间超时问题 ConnectionPlar opx 在FXO/FXS的应用

shell分析swap分区被哪些程序占用(stress模拟环境)

1.查看版本cat /etc/debian_version 7.8 2.看下内存(我这边是256MB内存 swap分了4G)free -m             total       used       free     shared    buffers     cachedMem:           231        124        106          0          8         79-/+ buffers/cache:         36