簡體   English   中英

Python:行程編碼

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

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