我需要得到用戶輸入的關鍵詞是相同的長度,用戶輸入信息,例如:如何獲得字母輸入以匹配另一個字母輸入的長度?
keyword = "gcse" # the keyword input
message = "python" # the message input
newkeywordshouldbe = "gcsegc"
這似乎很簡單,但我一直無法弄清楚如何完成它。想法?
我需要得到用戶輸入的關鍵詞是相同的長度,用戶輸入信息,例如:如何獲得字母輸入以匹配另一個字母輸入的長度?
keyword = "gcse" # the keyword input
message = "python" # the message input
newkeywordshouldbe = "gcsegc"
這似乎很簡單,但我一直無法弄清楚如何完成它。想法?
使用模運算(%
)和數組索引。
keyword = 'gcse'
message = 'python'
n, m = len(keyword), len(message)
print ''.join([ keyword[ i % n ] for i in range(m) ])
以下交互式的Python(與keyword
,message
,n
和m
已經聲明和初始化)會議上解釋說:
>>> 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']
嘗試以下操作:
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);但這種超級清楚傳達給定的三個邏輯可能性的邏輯:
keyword
和message
具有相同的長度。keyword
短於message
。keyword
長於message
。即使採用更多Pythonic解決方案,理解當然的基本邏輯也很重要。
感謝因此,這幫助我瞭解了代碼 –
中發生了什麼@ShahzaibShuzBari:不客氣。很高興你發現我的答案有幫助;如果你願意的話,現在你可以享有相應的聲望。 ;) – J0e3gan
另一解決方案是使用cycle
函數是這樣的:
from itertools import cycle
keyword = "gcse"
message = "python"
iterator = cycle(keyword)
newkeywordshouldbe = ''.join(iterator.next() for i in range(len(message)))
另一種方式來處理,它是:
import math
new_word = (math.ceil(len(message)/len(keyword)) * keyword)[:len(message)]
即時通訊不知道如何進口功能的作品,我也有python 2.7,所以我不相信他們實施它,早期 感謝您的幫助,雖然 –
這工作完全謝謝soo –
我真的很享受快速工作,這是如何工作的:它像mpcabd的解決方案減去進口(這是偉大的)。在[範圍(m)]中檢查'[關鍵字[i%n]]'(產生'['g','','c','e','g','s']')和考慮模數結果應該爲最初不清楚的任何人觸發一個燈泡時刻。:P – J0e3gan
還有另一種解決方案,它使用模:'newkeyword = keyword *(len(message)/ len(keyword))+ keyword [:len(message)%len(keyword)]':) – mpcabd