[英]Python: Run-Length Encoding
如果輸入僅包含不帶數字的字符,則會出現錯誤。 例如,如果用戶輸入“ a2bc”,則輸出應為“ aabc”。 我必須滿足游程長度格式。 如果解碼功能的“ a2b1c1”有效。 單個字符無法識別任何字符。 我玩了條件和調試器。 我似乎無法滿足游程長度的格式。
下面顯示的代碼是我的嘗試。 我在試圖解決問題的區塊上發表了評論。
def decode(user_input):
if not user_input:
return ""
else:
char = user_input[0]
num = user_input[1]
if num.isdigit():
result = char * int(num)
# elif num.isalpha():
# # this should skip to the next two characters
else:
result = char * int(num)
return result + decode(user_input[2:])
test1 = decode("a2b3c1")
test2 = decode("a2b3c")
print(test1)
print(test2)
(注意:test2的輸出應為"aabbbc"
)
非常感謝。
這需要進行兩項更改:正如您已經知道的那樣,如果num
實際上不是數字,則只需使用一次char,然后跳過一個字符。 否則,您將使用數字並在前面跳過兩個字符。 但是,您還需要處理單個字符,字符串末尾沒有數字。 您不僅可以檢查user_input
是否為空,還可以檢查它是否只有一個字符來解決此問題-在兩種情況下,您都可以簡單地返回字符串。
def decode(user_input):
if len(user_input) < 2:
return user_input
char = user_input[0]
num = user_input[1]
if num.isdigit():
return char * int(num) + decode(user_input[2:])
else:
return char + decode(user_input[1:])
當下一個字符不是數字時(即1是隱式的),應將1而不是2提前:
def decode(user_input):
if len(user_input) < 2 : return user_input
multiplier,skip = (int(user_input[1]),2) if user_input[1].isdigit() else (1,1)
return user_input[0] * multiplier + decode(user_input[skip:])
請注意,由於最大遞歸限制,因此遞歸執行此操作將限制您可以處理的輸入字符串的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.