轨道
/
Python
Python
/
练习
/
OCR 数字
OCR 数字

OCR 数字

简单

简介

你的好朋友 Marta 最近得到了梦寐以求的工作,在当地一家历史博物馆的藏品部门工作。 他们知道你热爱编程,便向你倾诉了工作中遇到的一个难题:博物馆即将举办一场关于计算机历史的展览。 当地一所大学的数学系捐赠了几箱历史打印资料,但考虑到这些文件保存状况很差,大家决定把上面的文本数字化。 不过,那所大学的旧打印机在表示文本的方式上有一些古怪之处,你的朋友需要你的帮助才能顺利提取出数据。

说明

光学字符识别(OCR)是一种把文本图像转换成机器可读文本的软件。 给定一个由字符组成的网格,表示若干个数字,请把这个网格转换成由数字组成的字符串。 如果网格包含多行单元格,输出中的各行之间应该用","分隔。

  • 网格由一行或多行单元格组成。
  • 网格的每一行由一个或多个单元格组成。
  • 每个单元格宽三列、高四行(3x4),表示一个数字。
  • 数字使用竖线("|")、下划线("_")和空格(" ")绘制。

边界情况

  • 如果输入的尺寸无效,你的程序应该指出存在错误。
  • 如果输入的尺寸正确,但某个单元格无法识别,你的程序应该为该字符输出"?"。

示例

下面的输入(不含注释)会被转换成"1234567890"。

      _  _     _  _  _  _  _  _  #
    | _| _||_||_ |_   ||_||_|| | # Decimal numbers.
    ||_  _|  | _||_|  ||_| _||_| #
                                 # The fourth line is always blank,

下面的输入会被转换成"123,456,789"。

    _  _ 
  | _| _|
  ||_  _|
         
    _  _ 
|_||_ |_ 
  | _||_|
         
 _  _  _ 
  ||_||_|
  ||_| _|
         

异常信息

有时需要抛出异常。这时,你应当始终附上有意义的错误信息,指明错误的来源。这让代码更易读,也大大有助于调试。如果你知道错误来源一定是某种类型,可以选择抛出某个内置错误类型,但仍然要附上有意义的信息。

本练习要求你在 convert() 函数收到不是合法 OCR 数字的字符串时,用 raise 语句“抛出”一个 ValueError。只有既 raise 这个 exception,又附上信息,测试才会通过。

要抛出带信息的 ValueError,把这条信息写成 exception 类型的参数:

# when the rows aren't multiples of 4
raise ValueError("Number of input lines is not a multiple of four")

# when the columns aren't multiples of 3
raise ValueError("Number of input columns is not a multiple of three")
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Python Exercism

准备好开始 OCR 数字 了吗?

注册 Exercism,借助 17 个概念146 个练习 和真人导师指导,学习并掌握 Python,全部免费。