作者pziyout (pziyout)
看板Python
標題Re: [問題] 怎麼用*排出數字
時間Fri Jul 5 17:28:28 2019
※ 引述《ben1357956 (QQ雞腿)》之銘言:
: 如題
: 我想要輸入一串數字
: 自動輸出成米字號的樣子
: 像是輸入1
: 跑出下列這樣
: *
: *
: *
: *
: *
: *
: *
: 新手上路,多多指教
我想你的問題大約是輸入數字,要產生對應的點陣圖,例如:
> 23904
2222 3333 9999 0000 4 4
2 3 9 9 0 0 4 4
2222 3333 9999 0 0 4444
2 3 9 0 0 4
2222 3333 9999 0000 4
這題目就是先將各個數字的點陣圖以數字存起來,例如:數字 2 的點陣圖
如下,中間圖形是將左邊的點陣以二進位表示,右邊為將二進位數換成十進位
數字表示,如此數字二的 5x4 點陣就可用 15,1,15,8,15 等五個數字替代。
**** 1111 15
* 0001 1
**** 1111 15
* 1000 8
**** 1111 15
接下來當然就是要如何由各列的 10 進位數字得知其二進位的位元是 0 或
是 1,若為 1 則印資料,若為 0 則印空格,此時可利用 >> 運算子將數字
的位元向右移若干位,例如:數字 12 的二進位為 1100 使用 >> 可向右移
動若干個位元,觀察以下可知數字 12 各位元的資料都被擠到最右邊,同時
最右邊的位元剛好控制數字為奇數或偶數,如此一來就可用 %2 得知,
整個過程如下:
12 >> 0 ===> 1100 %2 後得 ---> 0 ( = (12>>0)%2 )
12 >> 1 ===> 110 %2 ---> 0 ( = (12>>1)%2 )
12 >> 2 ===> 11 %2 ---> 1 ( = (12>>2)%2 )
12 >> 3 ===> 1 %2 ---> 1 ( = (12>>3)%2 )
由以上可觀察到 12 的二進位位元由最高位元到最低位元可由以上步驟
由下往上取得,換成迴圈為:
for i in range(3,-1,-1) :
print( (12>>i)%2 , end="" )
這個部份解決了剩下的就簡單了,整個程式就簡單了:
# 0 .. 9 的點陣數字
bmap = ( (15,9,9,9,15), (2,2,2,2,2), (15,1,15,8,15), (15,1,15,1,15),
(9,9,15,1,1), (15,8,15,1,15), (15,8,15,9,15), (15,1,2,2,2),
(15,9,15,9,15), (15,9,15,1,15) )
# 每個點陣為 5x4
R , C = len(bmap[0]) , 4
while True :
n = input("> " )
for r in range(R) :
for k in range(len(n)) :
m = int(n[k])
for c in range(C-1,-1,-1) :
s = (bmap[m][r] >> c)%2
print( m if s else " " , end="" )
print( end=" " )
print()
print()
以上程式用了三層迴圈,先是各列,再來是各個數字,最後是取出各數字位元
要留意,僅在列迴圈才換列。
學會了,看看你會不會修改以上程式讓數字隨意上下跳動若干位置:
> 23489
-----------4--4-----------
-2222------4--4-8888------
----2------4444-8--8-9999-
-2222---------4-8888-9--9-
-2----3333----4-8--8-9999-
-2222----3------8888----9-
------3333-----------9999-
---------3----------------
------3333----------------
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.25.29 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1562318910.A.66D.html
推 ides13: 推 07/05 17:35
※ 編輯: pziyout (140.115.25.29 臺灣), 07/05/2019 17:55:01
推 liquidbox: 07/05 17:51
推 JamesChen: 居然願意回 真的推 人太好了 07/05 19:43
推 BalloonBa: 推 07/05 22:48
推 cutekid: 推(y) 07/06 01:28
推 ben1357956: 前輩真的感謝 寫的超詳細 07/06 02:14
推 nurockplayer: 推 07/06 07:42
→ Hsins: 人太好ㄌ,這個是某本書的第一章練習題而已... 07/06 17:24
推 yummy8765: 推.... 07/08 03:49
推 stillcolor: 真的是第一章的練習題+1,當初看到也傻眼 07/08 16:40
推 jackflu: 熱心 07/31 14:29
推 sunherbcat: 請問是哪本書?我想買來練python 08/17 15:04