【问题标题】:Printing randomized letters between every letter in a word在单词的每个字母之间打印随机字母
【发布时间】:2020-03-23 21:00:09
【问题描述】:

我正在用 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 是我要打印之间的字母,randomLettersNumbers 是我的随机字符列表。但是,它也将它们打印在单词的外端,例如-P-y-t-h-o-n-,我该如何修复它使其仅在内部?

【问题讨论】:

    标签: python


    【解决方案1】:

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

    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”之前用空格分隔单词

    string = "This is a sentence"
    array = string.split(" ")
    newArray = [addCharacters(word, 1, ["a", "b", "c"]) for word in array]
    newString = " ".join(newArray)
    print(newString)
    

    【讨论】:

    • 不幸的是,当我尝试“这是一个句子”时,我得到了:TlhliFsU wiasr Bad K zsQeYn0tvecnzcNe
    【解决方案2】:

    我试过你的代码,似乎在字符串前面插入的字符可能是由空格引起的。为了避免在末尾插入随机字符,只需对字符串进行切片并在 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() 方法重新加入修改后的字符串。

    【讨论】:

    • 不幸的是,当我尝试“这是一个句子”时,我得到:TlhliFsU wiasr Bad K zsQeYn0tvecnzcNe
    • 我更新了我的代码。现在它也应该可以处理句子了。
    • 是的!我实际上还有一个问题.. 当我尝试这个时:This is a sentence, And this is a sentence.This is a sentence, 在顶行和And this is a sentence. 在它下面的行,出于某种原因我得到Twhkiks i7s a AqnQd svehnTt5exnpc9e,o tGhiiss iis a SsleRnftYeqnscien,,我不知道如何解决这个问题?它们在同一行,And 位于 sentence 之前
    • 首先用inputFile = open(originalFile, 'r')打开文件(originalFile是用户输入)然后在string = inputFile.read()函数之前打开
    • 我刚刚意识到问题来自我的另一个函数,它在添加随机字符之前反转文件中的单词。抱歉,我对编程很陌生。
    【解决方案3】:

    关注这条线:for c in string:

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

    在那张纸条上,我认为您实际上不会在string 的第一个字母之前看到随机字符。出于调试目的,对随机字符进行硬编码而不是调用 random.choice 将有助于可视化正在发生的事情。

    【讨论】:

    • 好的,有道理,谢谢!在这方面我是一个初学者,我不确定如何遍历除最后一个字符之外的所有字符,但我可能会像 for c in range(len(string-1)): 这样的东西,尽管这对我不起作用..
    • for i in range(len(string) - 1): # do something with string[i] instead of c
    【解决方案4】:

    试试:

    import numpy as np
    
    def addCharacters(stringIn, strength, randomLettersNumbers):
        addedLetters=np.random.choice(randomLettersNumbers, size=(len(stringIn)-1, strength))
        return ''.join(map(''.join, zip(stringIn, map(''.join, addedLetters))))+stringIn[-1]
    

    输出:

    >>> randomL=list("qwertyuiopasdfghjklzxcvbnm1234567890")
    >>> print(addCharacters("Python", 2, randomL))
    
    P7oyumtcghbmoern
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-10
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多