2015-09-11 20 views

回答

1

使用模運算(%)和數組索引。

keyword = 'gcse' 
message = 'python' 
n, m = len(keyword), len(message) 
print ''.join([ keyword[ i % n ] for i in range(m) ]) 

以下交互式的Python(與keywordmessagenm已經聲明和初始化)會議上解釋說:

>>> range(m) 
[0, 1, 2, 3, 4, 5] 
>>> [i % n for i in range(m)] 
[0, 1, 2, 3, 0, 1] 
>>> [keyword[i % n] for i in range(m)] 
['g', 's', 'c', 'e', 'g', 's'] 
+0

這工作完全謝謝soo –

+0

我真的很享受快速工作,這是如何工作的:它像mpcabd的解決方案減去進口(這是偉大的)。在[範圍(m)]中檢查'[關鍵字[i%n]]'(產生'['g','','c','e','g','s']')和考慮模數結果應該爲最初不清楚的任何人觸發一個燈泡時刻。:P – J0e3gan

+1

還有另一種解決方案,它使用模:'newkeyword = keyword *(len(message)/ len(keyword))+ keyword [:len(message)%len(keyword)]':) – mpcabd

0

嘗試以下操作:

keyword = "gcse" 
message = "python" 
newkeywordshouldbe = "gcsegc" 

keywordLen = len(keyword) 
messageLen = len(message) 

if keywordLen == messageLen: 
    newkeyword = keyword 
elif keywordLen > messageLen: 
    newkeyword = keyword[:messageLen] 
elif keywordLen < messageLen: 
    # Use keyword in its entirety as many times as possible to match 
    # message's length; then match the rest of message's length with 
    # as many of keyword's characters as needed. 
    newkeyword = ''.join(keyword * (messageLen/keywordLen)) + \ 
     keyword[:messageLen - keywordLen] 

print newkeyword 

您可以在相關Ideone demo運行上面的代碼。此外,您可以從更少的位置擠壓更多,並使解決方案更多地爲Pythonic(例如mpcabd's);但這種超級清楚傳達給定的三個邏輯可能性的邏輯:

  • keywordmessage具有相同的長度。
  • keyword短於message
  • keyword長於message

即使採用更多Pythonic解決方案,理解當然的基本邏輯也很重要。

+1

感謝因此,這幫助我瞭解了代碼 –

+0

中發生了什麼@ShahzaibShuzBari:不客氣。很高興你發現我的答案有幫助;如果你願意的話,現在你可以享有相應的聲望。 ;) – J0e3gan

2

另一解決方案是使用cycle函數是這樣的:

from itertools import cycle 

keyword = "gcse" 
message = "python" 
iterator = cycle(keyword) 

newkeywordshouldbe = ''.join(iterator.next() for i in range(len(message))) 
+2

你也可以只做'for _ in message' – acushner

+0

不錯。這就是我所說的Pythonic更可能的意思。謝謝! – J0e3gan

+1

如果我們是從itertools導入的,就有'''.join(islice(cycle(keyword),len(message)))';但無論如何,我們可以使用'next(iterator)'而不是'iterator.next()'來更加向前兼容。 – DSM

0

另一種方式來處理,它是:

import math 
new_word = (math.ceil(len(message)/len(keyword)) * keyword)[:len(message)] 
+0

即時通訊不知道如何進口功能的作品,我也有python 2.7,所以我不相信他們實施它,早期 感謝您的幫助,雖然 –