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:我实际上最喜欢这个解决方案,因为它仍然是一个不需要导入的单行程序,但使我解释的三路逻辑非常明显。当然,在关键字上循环/循环
的字符也映射到该三向逻辑;但我认为,更清楚地看到它的出现会更好。