2017-06-13 99 views
0

如果字符串有「xxxyyz」,輸出將是3x2y1z 我不知道如何去做這個問題,我嘗試了多種方法,但似乎無法接近任何地方靠近輸出我想計算字符串的運行長度編碼

s = input("Please type a sentence or word: ") 
i = 0 
count = 1 
while len(s) <=i: 
    if s[i] == s[i+1]: 
     count = count+1 
     s1 = count + s[i] 

第一週的學習編程,我知道我在幹什麼,有錯希望有人可以幫助明確,可能解釋我應該做的 謝謝!

回答

0

這是您可以嘗試的版本。它採用zip在同一時間和enumerate遍歷輸入字符串的在兩個相鄰的字符能夠打印什麼保留在循環的結尾:

strg = "xxxyyz" 

mult = 1 
lgth = len(strg) 
for i, (prev, nxt) in enumerate(zip(strg, strg[1:])): 
    if prev != nxt: 
     print('{}{}'.format(mult, prev), end='') 
     mult = 1 
    else: 
     mult += 1 
    if i == lgth-2: # print what is left at the end of the string 
     print('{}{}'.format(mult, nxt)) 

循環會跑過來

i (prev, nxt) 
------------- 
0 ('x', 'x') 
1 ('x', 'x') 
2 ('x', 'y') 
3 ('y', 'y') 
... 

其實沒有必要爲enumerate; nxt是在循環後訪問:

mult = 1 
for prev, nxt in zip(strg, strg[1:]): 
    if prev != nxt: 
     print('{}{}'.format(mult, prev), end='') 
     mult = 1 
    else: 
     mult += 1 
print('{}{}'.format(mult, nxt)) 
+0

太感謝你了,現在我只需要了解枚舉和拉鍊的意思,但它可以幫助清理所有其他情況! – BrianStolars

+0

對不起,只是另一個問題,當我把xxxyyzz輸出給我3x2y1y而不是3x2y1z,我試着改變「如果我== lgth-2」和其他部分玩,但不知道爲什麼它給y而不是z – BrianStolars

+0

? ...我爲'xxxyyzz'輸入''3x2y2z''。 –

0

使用collections.Counter它

import collections 
collections.Counter(your_string)