如何获得一个字母输入以匹配另一个字母输入的长度?

2024-06-10 23:33:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要获得与用户输入消息长度相同的用户输入关键字,例如:

keyword = "gcse"  # the keyword input
message = "python" # the message input
newkeywordshouldbe = "gcsegc"

这似乎很简单,但我一直想不出如何做到这一点。思想?你知道吗


Tags: the用户消息messageinput关键字keyword思想
3条回答

使用模运算(%)和数组索引。你知道吗

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']

另一种解决方案是像这样使用^{}函数:

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"
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长度相同。你知道吗
  • keywordmessage短。你知道吗
  • keywordmessage长。你知道吗

即使采用一种更为python的解决方案,理解其基本逻辑也很重要。你知道吗

相关问题 更多 >