程序點滴001_Python模擬點陣數字


  嘗試過很多編程語言,寫過不少程序(當然,基本上都是些自娛自樂或給自己用的工具類的小玩意兒),逐漸認識到編寫程序是一個不斷完善、不斷優化的過程——編程首先要有一個想法(目標),圍繞這個目標形成最基本的功能邏輯,測試證明功能有效之后就算目標基本實現了。隨后,可以擴展基本功能的應用領域,加強程序的容錯能力和交互性,逐漸形成一個更完善更健壯的程序。以下通過一個小例子來對此過程稍作展示:

  在計算器上、電梯上、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<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()

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM