Re: [問題] 怎麼用*排出數字
※ 引述《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
推
07/05 17:35,
4年前
, 1F
07/05 17:35, 1F
※ 編輯: pziyout (140.115.25.29 臺灣), 07/05/2019 17:55:01
推
07/05 17:51,
4年前
, 2F
07/05 17:51, 2F
推
07/05 19:43,
4年前
, 3F
07/05 19:43, 3F
推
07/05 22:48,
4年前
, 4F
07/05 22:48, 4F
推
07/06 01:28,
4年前
, 5F
07/06 01:28, 5F
推
07/06 02:14,
4年前
, 6F
07/06 02:14, 6F
推
07/06 07:42,
4年前
, 7F
07/06 07:42, 7F
→
07/06 17:24,
4年前
, 8F
07/06 17:24, 8F
推
07/08 03:49,
4年前
, 9F
07/08 03:49, 9F
推
07/08 16:40,
4年前
, 10F
07/08 16:40, 10F
推
07/31 14:29,
4年前
, 11F
07/31 14:29, 11F
推
08/17 15:04,
4年前
, 12F
08/17 15:04, 12F
討論串 (同標題文章)