簡體   English   中英

每隔 n 個字符向后迭代拆分一個 Python 字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM