"大写"数字(bigdigits.py)

一曲冷凌霜 提交于 2019-12-06 14:10:08

“大写”的数字

我们在生活中的大量场景时常会看到屏幕上的各种类型的数字,类似时间报点、号码定位。
那么你是否思考过这是如何实现的呢,打印机是如何按照你的意愿来打出你输入的数字呢,如果没有那我们今天就通过一个很简单的python程序来讨论讨论这些数字是如何实现显示的。

Alt

建立字符库

我们观察可以发现每一个都是“*”的集合,那我们可以通过数字来进行构建字符库。
比如零“0”。(左边我们可以看到是否符合数字的外形,但如果每一个数字都这样子排布代码会显得很臃肿不整洁,所以我们需要将其平展开来。

Zero=['*****',     Zero=['*****','*   *','*   *','*   *','*   *','*   *','*****']
      '*   *',
      '*   *',
      '*   *',
      '*   *',
      '*   *',
      '*****']

那设计完所有的数字后我们就能得到这样子完整的字符库了。

Zero=['*****','*   *','*   *','*   *','*   *','*   *','*****']
One=['  *  ',' **  ','* *  ','  *  ','  *  ','  *  ','*****']
Two=['*****','    *','    *','*****','*    ','*    ','*****']
Three=['*****','    *','    *','*****','    *','    *','*****']
Four=['  *  ',' **  ','* *  ','*****','  *  ','  *  ','  *  ']
Five=['*****','*    ','*    ','*****','    *','    *','*****']
Six=['*****','*    ','*    ','*****','*   *','*   *','*****']
Seven=['*****','    *','    *','   * ','  *  ',' *   ','*    ']
Eight=['*****','*   *','*   *','*****','*   *','*   *','*****']
Nine=['*****','*   *','*   *','*****','    *','    *','*****']

设计思路流程

要打出数字首先我们要先从用户那里获得数据,每一个数字都是由七个长度(七行)的列表组成的,所以我们先用while循环每一个行数再在其中用while循环每一个列数,然后我们将每一次列数循环的结果累加并赋值给一个变量,最后在每一次行数循环中将变量输出,并在下一次循环开始清空变量。

Alt

代码

digits = input("请输入你的数字:")

但如果用户输入的不是非负整数,程序就会报错,用户体验不好所以我们需要引入try语句来捕捉异常处理

try:
    digits = input("请输入你的数字:")
    row = 0
    while row < 7:
        col = 0
        line = " "
        while col < len(digits):
            number = int(digits[col])
            length = Digits[number]
            add = length[row]
            line += add + " "
            col += 1
        print(line)
        row += 1
except ValueError as err:
    print(err)

内部的while循环每次结束时,我们会打印出刚构建好的行。理解这一程序的关键之处在于我们将每个数字的row字符串添加到当前row的行。读者可以尝试运行该程序,以便理解其运作方式。

Zero=['*****','*   *','*   *','*   *','*   *','*   *','*****']
One=['  *  ',' **  ','* *  ','  *  ','  *  ','  *  ','*****']
Two=['*****','    *','    *','*****','*    ','*    ','*****']
Three=['*****','    *','    *','*****','    *','    *','*****']
Four=['  *  ',' **  ','* *  ','*****','  *  ','  *  ','  *  ']
Five=['*****','*    ','*    ','*****','    *','    *','*****']
Six=['*****','*    ','*    ','*****','*   *','*   *','*****']
Seven=['*****','    *','    *','   * ','  *  ',' *   ','*    ']
Eight=['*****','*   *','*   *','*****','*   *','*   *','*****']
Nine=['*****','*   *','*   *','*****','    *','    *','*****']
Digits=[Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine]
while True:
    try:
        digits = input("请输入你的数字:")
        row = 0
        while row < 7:
            col = 0
            line = " "
            while col < len(digits):
                number = int(digits[col])
                length = Digits[number]
                add = length[row]
                line += add + " "
                col += 1
            print(line)
            row += 1
    except ValueError as err:
        print(err)

在结尾我们会对这个程序的输出进行稍许改变,以便让读者能更加理解这个程序的微妙之处。

结尾练习

在这里插入图片描述
这里我们将数字本身代替了”“符号的显示,要想做到这一点我们有两种方式
第一种就是直接改些字符库本身但是这样子并不便捷。
第二种通过再加一个循环,在循环中添加if判断来判断是空字符" “还是”
**"字符

代码如下

Zero=['*****','*   *','*   *','*   *','*   *','*   *','*****']
One=['  *  ',' **  ','* *  ','  *  ','  *  ','  *  ','*****']
Two=['*****','    *','    *','*****','*    ','*    ','*****']
Three=['*****','    *','    *','*****','    *','    *','*****']
Four=['  *  ',' **  ','* *  ','*****','  *  ','  *  ','  *  ']
Five=['*****','*    ','*    ','*****','    *','    *','*****']
Six=['*****','*    ','*    ','*****','*   *','*   *','*****']
Seven=['*****','    *','    *','   * ','  *  ',' *   ','*    ']
Eight=['*****','*   *','*   *','*****','*   *','*   *','*****']
Nine=['*****','*   *','*   *','*****','    *','    *','*****']
Digits=[Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine]
while True:
    try:
        digits = input("请输入你的数字:")
        row = 0
        while row < 7:
            col = 0
            line = " "
            while col < len(digits):
                number = int(digits[col])
                length = Digits[number]
                add = length[row]
                change = 0
                changes = ""
                while change < len(add):
                    if add[change] == "*":
                        changes += str(number)
                    else:
                        changes += " "
                    change += 1
                add = changes
                line += add + " "
                col += 1
            print(line)
            row += 1
    except ValueError as err:
        print(err)
    except IndexError:
        print("请输入数字")
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!