![](/img/trans.png)
[英]Split python string every nth character iterating over starting character
[英]Splitting a Python string every nth character iterating backwards
我正在開發一個將數字轉換為二進制的程序,反之亦然。 當用戶輸入諸如1011110110
之類的二進制字符串時,它會被轉換為十進制並打印出來。 我還想打印出用戶輸入的字符串,例如10 1111 0110
。
我努力了
print("Binary \t=\t " + ' '.join(binaryString[i:i+4] for i in range(0, len(binaryString), 4)))
這將打印為1011 1101 10
。 我希望空格從字符串的末尾開始,如10 1111 0110
。
您可以使用模塊%
運算符來了解您有多少“溢出”數字,然后每 4 次對余數進行分區:
def neat_print(s):
ls = len(s)
start = ls % 4
rv, s = s[:start], s[start:]
return ' '.join([rv] + [s[i:i+4] for i in range(0,ls-start,4)]).strip()
for k in ["1010101010"[:end] for end in range(2,10)]:
print(k, "->", neat_print(k))
Output:
10 -> 10
101 -> 101
1010 -> 1010
10101 -> 1 0101
101010 -> 10 1010
1010101 -> 101 0101
10101010 -> 1010 1010
101010101 -> 1 0101 0101
您可以使用遞歸方法:
def rGroup(S,size=4,sep=" "):
return S if len(S)<=size else rGroup(S[:-size],size,sep) + sep + S[-size:]
output:
rGroup('1010101010') # '10 1010 1010'
rGroup('12345678',3,',') # '12,345,678'
binaryString = "1011110110"
print("Binary \t=\t " + rGroup(binaryString)) # Binary = 10 1111 0110
只需在代碼中的兩個位置添加[::-1]
:
' '.join(binaryString[::-1][i:i+4] for i in range(0, len(binaryString), 4))[::-1]
ps [::-1]
反轉字符串,所以你只需反轉它,以你的方式添加空格,然后再次反轉到正確的初始順序。
您需要確定從哪里開始 cursor 以在開始時打印出正確的數字
string_length = len(binaryString)
# Start position is the remainder when dividing by 4
start_pos = string_length % 4
output_items = []
# Get first item
if start_pos > 0:
output_items.append(binaryString[0:start_pos])
# Go through the remainder of the string
for i in range(start_pos, string_length, 4):
output_items.append(binaryString[i:i+4])
print("Binary \t=\t " + ' '.join(output_items))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.