#
# 純英文, 純中文, 英中混合字串組成的列表(list)內容進行對齊: 右, 左, 中
# 匯入後, 執行 chn_en_alignment.test() 檢視如何使用
# 匯入後, 執行 chn_en_alignment.newrlcjust(listchk, ttllength, direction ='r', fillwith = '0')
# 或 import chn_en_alignment.newrlcjust as rlcjust, 再按照 rlcjust('上述引數順序') 執行
# v1, 20201016
## data for test
list1=
['abc'
,'a'
,'abcded'
,'aa'
]list2=
['中芯'
,'台積電'
,'華為科技'
]list3=
['nxp'
,'中芯'
,'台積電'
]list4=
['nxp'
,'中芯'
,'huawei科技'
]list5=
['123'
,'中"芯"'
,'華hua為wei'
]usage=
'''usage:
newrlcjust(listchk, ttllength, direction ='r', fillwith = '0')
listchk: 字串元素 list, 待檢查
ttllength: 整數, list中所有字串對齊的寬度要求,
ttllength: 數字採用ttllength 與 list中字元轉最大長度 的最大者
direction: r-right, l-left, c-center, 預設 r
fillwith: 用什麼填充空位(如果有), 預設 0 (零), 暫不支援非英文或非單位元組字元'''
# chn =2, en=1, return additional len
defgetlen
(strchk)
:# get total length, chn calculated as 2, en as 1
strlen =
0for letter in strchk:
# print(letter, flush=true)
iford
(letter)
>
255:
strlen +=
2else
: strlen +=
1return strlen
defnewrlcjust
(listchk, ttllength, direction =
'r', fillwith =
'0')
:# listchk: list with elements to be aligned;
# ttllength: total length you see after output;
# direction, default as 'r', one of the three 'r', or 'l', or 'c',
# fillwith, default as '0';
listchklenmax=
max(getlen(x)
for x in listchk)
for strchk in listchk:
difflength =
0if ttllength > listchklenmax:
listchklenmax = ttllength
ttl = listchklenmax -
(getlen(strchk)
-len
(strchk)
)if direction ==
'r':
print
(strchk.rjust(ttl, fillwith)
)elif direction ==
'l':
print
(strchk.ljust(ttl, fillwith)
)else
:print
(strchk.center(ttl, fillwith)
)def
test()
:print
('\n中文計位2個寬度, 英文計位1個寬度.'
)print
('len(str)把中、英文的單個部分,均計位長度 1'
)print
(usage)
print
("*"*66
,'\n'
)print
('following are examples: \n'
) i_sequence =
0for lst in
[list1, list2, list3, list4, list5]
:print
('lst:'
,lst)
direction=
['r'
,'l'
,'c'
][i_sequence]
print
("example as: newrlcjust(lst, ttllength=1, direction ='"
+direction +
"', fillwith = '0')"
) newrlcjust(lst, ttllength=
1, direction =direction, fillwith =
'0')
print
('\n'
) i_sequence +=
1 i_sequence = i_sequence %
3if __name__ ==
'__main__'
:# newrlcjust(list4, 20, direction ='r', fillwith = '…')
# fill的 … ,中文輸入法下 shift + 6, 再backspace一次. powershell下無法輸入
test(
)
擴充套件字串左右對齊方法
net自帶的string.padright 方法按照msdn的說明是 左對齊此字串中的字元,在右邊用空格或指定的 unicode 字元填充以達到指定的總長度。實際使用中卻發現問題 對於我們中文使用者來說,雙位元組的漢字和單位元組的字元同時處理是不可避免的,這時候此方法是不能實現其所謂的對齊效果的 為...
字串的綜合練習
先判斷第乙個字元是否為字母或者下劃線 如果是,繼續判斷 如果不是,直接報錯 依次判斷除了第乙個字元以外的其他字元,判度是否為字母 數字或者下劃線 回答正確 right 1 num 1 elif c exit print exit break else print 回答錯誤 num 1 if num ...
字串的對齊 python
根據cookbook進行整理 a hello world b a.ljust 20 預設為填充空格,將長度擴充套件至20 print b hello world c a.ljust 20,在字串中填充 將長度擴充套件至20,並將原字串左對齊 print c hello world a hello w...