Python 在一个单词的每个字母之间打印随机字母

Python 在一个单词的每个字母之间打印随机字母,python,Python,我正在用Python3编写一个程序,它对一个文件执行许多操作,其中一个操作是在字符串中的每个单词之间添加随机数和字母。我希望随机字符不在单词的末尾,例如,对于单词Python: P-y-t-h-o-n 其中-是随机字符的位置。 到目前为止,我已经: def addCharacters(string, strength, randomLettersNumbers): newString = '' for c in string: letters = ''

我正在用Python3编写一个程序,它对一个文件执行许多操作,其中一个操作是在字符串中的每个单词之间添加随机数和字母。我希望随机字符不在单词的末尾,例如,对于单词Python:

P-y-t-h-o-n
其中
-
是随机字符的位置。 到目前为止,我已经:

def addCharacters(string, strength, randomLettersNumbers):
    newString = ''
    for c in string:
        letters = ''
        for k in range(strength):
            letters += random.choice(randomLettersNumbers)
        newString += c + letters
    return newString

其中,
strength
是每个字母之间要打印的随机字符的数量,
string
是我正在打印的字母之间的数量,
randomlettesnumbers
是我的随机字符列表。但是,它也将它们打印在单词的外端,如
-P-y-t-h-o-n-
,我如何修复它,使其仅位于内部?

关注这一行:

对于字符串中的c:

您的代码在字符串中的每个字母后插入额外内容,但看起来您需要在每个字母后插入额外内容,最后一个字母除外。您需要一种方法来循环所有字符,最后一个除外;有几种方法可以做到这一点(例如,使用索引或列表切片,因为在Python中字符串有很多类似列表的行为)

在这一点上,我认为你实际上不会在
字符串
的第一个字母之前看到随机字符。出于调试目的,硬编码随机字符而不是调用
random。选择
将有助于可视化正在发生的事情。

尝试:

将numpy导入为np
def添加字符(字符串、强度、随机字母数):
addedLetters=np.random.choice(randomLettersNumbers,size=(len(stringIn)-1,strength))
返回“”。join(map(“”.join,zip(stringIn,map(“”.join,addedLetters)))+stringIn[-1]
产出:

>>randomL=list(“QWERTYUIOPASDSDFHJKLZXCVBNM1234567890”)
>>>打印(添加字符(“Python”,2,L))
P7oyumtcghbmoern

我尝试了您的代码,似乎字符串前面插入的字符可能是由空格引起的。要避免在末尾插入随机字符,只需将字符串切片并在return语句中添加最后一个字符:

def addCharacters(string, strength, randomLettersNumbers):
    newString = ''
    for c in string[:-1]:
        letters = ''
        for k in range(strength):
            letters += random.choice(randomLettersNumbers)
        newString += c + letters
    return newString+string[-1]+' '

def processSentence(string,strength,randomLettersNumbers):
    return "".join([addCharacters(s,strength,randomLettersNumbers) for s in string.split()])

这段代码应该通过拆分句子来生成您想要的结果。然后对每个单词分别应用该方法,并在末尾添加空格。join()方法重新联接修改后的字符串。

只需在原始字符串的每个字母后添加随机字母和数字,只需添加最后一个字母。代码可能如下所示:

def addCharacters(string, strength, randomLettersNumbers):
    newString = ''
    n = len(string)
    for i in range(n-1):
        letters = ''
        for k in range(strength):
            letters += random.choice(randomLettersNumbers)
        newString += string[i] + letters
    newString += string[n-1]
    return newString

addCharacters("python", 2, ["X", "2"]) # 'pX2y22t22hX2oX2n'
你的问题有些不同,你需要的是在应用“addCharacters”之前用空格分隔单词


好的,这很有道理,谢谢!说到这一点,我是一个初学者,我不确定如何迭代除最后一个字符以外的所有字符,我认为可能类似于
对于范围内的c(len(string-1)):
尽管这对我不起作用。
对于范围内的I(len(string)-1):#对字符串[I]做些什么而不是c
不幸的是,当我为“这是一个句子”尝试此选项时,我得到了:
TlhliFsU wiasr Bad K zsqeyn0tvecnze
不幸的是,当我为“这是一个句子”尝试此选项时,我得到了:TlhliFsU wiasr Bad K zsqeyn0tvecnze更新了我的代码。现在它也可以用来处理句子了。是的!实际上我还有一个问题。。当我试着这样做时:
这是一个句子,这是一个句子。
这是一个句子,
在上面一行,这是一个句子。
在下面一行,出于某种原因,我得到了
Twhkiks i7s AqnQd svehnTt5exnpc9e,o tGhiiss iis a SsleRnftYeqnscien,
,我不知道如何解决这个问题?它们位于同一行,
位于
语句之前
首先使用
inputFile=open(originalFile,'r')
(originalFile是用户输入)打开文件,然后在函数
string=inputFile.read()之前
我刚刚意识到问题来自我的另一个函数,它在添加随机字符之前反转文件中的单词。很抱歉,我对编程很陌生。
string = "This is a sentence"
array = string.split(" ")
newArray = [addCharacters(word, 1, ["a", "b", "c"]) for word in array]
newString = " ".join(newArray)
print(newString)