2016-11-18 321 views
-2

我的問題是,我不知道現在要去的代碼,我必須創建一個解壓縮代碼。我得到了錯誤(TypeError:不能通過'str'類型的非int類來乘以序列),並假設它是因爲我沒有正確地乘以字符串。另外,我無法使用名單,只是字符串操作這種分配解壓縮壓縮字符串

只是作爲一個例子,假設輸出的看起來像這個 - > cat2dog1qwerty3 - > catcatdogqwertyqwertyqwerty

功能:

def decompress(compressed_in): 
new_word = True 
char_holder = "" 
decompressed_out = "" 
for char in compressed_in: 
    if char.isalpha and new_word: 
     char_holder += char 
     new_word = False 
    elif char.isalnum: 
     decompressed_out += char * char_holder 
     new_word = True 
return decompressed_out 

主營:

# Import 
from compress import decompress 

# Inputs 
compressed_in = str(input("Enter a compressed string: ")) # compressed 

# Outputs 
decompressed_out = decompress(compressed_in) 
print(decompressed_out) 

回答

0

因爲這顯然是一個家庭作業,我不會給你的代碼,但這裏有幾個問題,我與你是什麼看 呈現。

  1. 縮進。這可能是複製和粘貼的人工產物,但def之後的每一行都應該縮進。

  2. 不調用函數。當你寫char.isalpha時,這可能不是你想要的。 .isalpha()是一個函數,所以你需要用圓括號來調用它,如char.isalpha()

  3. isalnum()可能不是您想要的功能。這將檢查是否某個字母或數字,但您已經檢查過字母,所以您可能需要檢查是否有數字的函數。這不是絕對必要的,因爲其他if條件仍然會首先觸發,但這是您可以標記的內容。

  4. 你永遠不會清除char_holder。它看起來像你的意思,因爲你有一個布爾new_word,你跟蹤,但你沒有正確使用它。在某些時候,你應該做char_holder = char(即不是+=)。我會讓你決定把邏輯放在哪裏。

  5. 最後,對於您遇到的錯誤。你是正確的,你沒有正確地把事情放在一起。考慮乘法陳述中的類型以及變量的值。例如,在第一遍中,char_holder將等於'cat',並且char將等於'3'。嘗試在Python解釋器中輸入'3' * 'cat',看看會發生什麼。從這裏應該可以看出你需要做些什麼來解決這個問題。

+0

嗯,我修正了一些事情,並得到一個空白的答案,而不是錯誤。我也完全刪除了new_word,因爲我不認爲我需要它。我只剩下http://imgur.com/a/FuJ5h – okai

+0

你還沒有真正調用'isalpha()'。通過在它之後不包括括號,你基本上只是問Python是否存在,這總是正確的。所以你的'elif'分支永遠不會發生。另外,「int(char)」這個語句本身沒有任何作用。你必須將結果分配給某個變量。 – user3030010

+0

你的權利,我解決了這兩個錯誤,並得到了代碼工作。感謝您的幫助。只是想知道,我將如何編輯代碼,使其與2位數字一樣工作,或者更像cat22dog14 – okai