如何获得字母输入以匹配另一个字母输入的长度?
How can I get an alphabetic input to match another alphabetic input in length?
我需要让用户输入的关键字与用户输入的消息长度相同,例如:
keyword = "gcse" # the keyword input
message = "python" # the message input
newkeywordshouldbe = "gcsegc"
这看起来很简单,但我一直无法弄清楚如何完成它。想法?
尝试以下操作:
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 (e.g. like );但是这个非常清楚传达了给定三种逻辑可能性的逻辑:
keyword
和message
长度相同
keyword
比 message
. 短
keyword
比 message
. 长
即使采用更 Pythonic 的解决方案,理解底层逻辑当然也很重要。
另一个解决方案是像这样使用 cycle
函数:
from itertools import cycle
keyword = "gcse"
message = "python"
iterator = cycle(keyword)
newkeywordshouldbe = ''.join(iterator.next() for i in range(len(message)))
使用模运算 (%
) 和数组索引。
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']
另一种方法是:
import math
new_word = (math.ceil(len(message) / len(keyword)) * keyword)[:len(message)]
我需要让用户输入的关键字与用户输入的消息长度相同,例如:
keyword = "gcse" # the keyword input
message = "python" # the message input
newkeywordshouldbe = "gcsegc"
这看起来很简单,但我一直无法弄清楚如何完成它。想法?
尝试以下操作:
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 (e.g. like
keyword
和message
长度相同keyword
比message
. 短
keyword
比message
. 长
即使采用更 Pythonic 的解决方案,理解底层逻辑当然也很重要。
另一个解决方案是像这样使用 cycle
函数:
from itertools import cycle
keyword = "gcse"
message = "python"
iterator = cycle(keyword)
newkeywordshouldbe = ''.join(iterator.next() for i in range(len(message)))
使用模运算 (%
) 和数组索引。
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']
另一种方法是:
import math
new_word = (math.ceil(len(message) / len(keyword)) * keyword)[:len(message)]