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

Python 如何获取字母输入以匹配另一个字母输入的长度?,python,repeat,Python,Repeat,我需要获得与用户输入消息长度相同的用户输入关键字,例如: keyword = "gcse" # the keyword input message = "python" # the message input newkeywordshouldbe = "gcsegc" 这似乎很简单,但我一直不知道如何实现它。想法?尝试以下方法: keyword = "gcse" message = "python" newkeywordshouldbe = "gcsegc" keywordLen = le

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

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
keyword=“gcse”
message=“python”
newkeywordshouldbe=“gcsegc”
关键字len=len(关键字)
messageLen=len(消息)
如果关键字len==messageLen:
newkeyword=关键字
elif关键字len>messageLen:
newkeyword=关键字[:messageLen]
elif关键字len
您可以在相关的环境中运行上面的代码

此外,您还可以从较少的资源中挤出更多资源,使解决方案更具吸引力(例如,like);但这非常清楚地表达了三种逻辑可能性的逻辑:

  • 关键字
    消息
    的长度相同
  • 关键字
    消息
  • 关键字
    消息

即使采用更具python风格的解决方案,理解底层逻辑也很重要。

另一种解决方案是使用如下函数:

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会话(已声明并初始化了
关键字
消息
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)]

您也可以在消息中为uu做
Nice。这就是我所说的一种更具python风格的可能性。谢谢如果我们还是从itertools导入,则会出现
'.join(islice(循环(关键字),len(消息))
;但是在任何情况下,我们都可以使用
next(迭代器)
而不是
iterator.next()
更具前向兼容性。我不确定导入功能是如何工作的,而且我有python 2.7,所以我不认为他们这么早就实现了它。谢谢你的帮助。这帮助我了解了code@ShahzaibShuzBari:不客气。很高兴你发现我的回答很有帮助;现在,如果你愿意,你有了相应提高投票权的名声我真的很喜欢快速了解它的工作原理:它就像mpcabd的解决方案减去导入(这很好)。检查
[关键字[i%n]中的i在范围(m)]
(产生
['g','s','c','e','g','s']
)并思考模结果应该会触发最初不清楚的任何其他人的一个灯泡时刻p还有另一个使用模的解决方案:
newkeyword=keyword*(len(message)/len(keyword))+keyword[:len(message)%len(keyword)]
:)@mpcabd:我实际上最喜欢这个解决方案,因为它仍然是一个不需要导入的单行程序,但使我解释的三路逻辑非常明显。当然,在
关键字上循环/循环
的字符也映射到该三向逻辑;但我认为,更清楚地看到它的出现会更好。