Python:在给定单词中的每个字母后面添加一些随机字母(A-Z; a-z)?

时间:2015-11-09 17:32:51

标签: python string random

我需要编写一个程序,在所提供的单词中的每个字母后面添加一些随机字母。

这就是我所拥有的:

import random
import string

def add_letters(word,number):

    for i in range(number):
        letters=''.join(random.choice(string.ascii_letters))         
        new_word=(letters.join(word))
    return new_word

如果输入add_letters(cat,1),输出应该是什么样子:

cZaQtR

我的程序总是返回1个字母,即使我给它一个不同的数字。此外,在单词中的每个字母后面总是相同的“随机”字母。

知道我做错了吗?

6 个答案:

答案 0 :(得分:1)

你的逻辑不正确。我建议在循环中添加一些调试打印输出,看看你得到了什么,如下所示:

for i in range(number):
    letters=''.join(random.choice(string.ascii_letters))         
    new_word=(letters.join(word))
    print i, letters, word, new_word

这应该告诉你哪里出错了。作为额外提示,您可以在第一个循环之外使用第二个循环。

答案 1 :(得分:1)

这里有很多逻辑错误,还有一些笨拙的编码(但不要担心,练习时你会变得更好)

  • 在每个循环中,new_word被删除
  • 您正在为new_word分配生成的字母加上原始字词,这不是您想要做的。
  • 无需使用''.join

正确答案如下:

def add_letters(word,number):
    new_word = ""
    for c in word: # iterate through the word
        letters = ""
        for k in range(number): # concatenate n random letters
            letters += random.choice(string.ascii_letters)   
        new_word += c + letters # add the current char plus the letters to the new word
return new_word

答案 2 :(得分:0)

你永远不会在每次迭代中保留你添加的字母。

你在每次迭代时都会new_word=(letters.join(word)),它永远不会保留以前迭代中的随机字母,并使用' .join('另一些东西')将添加'某事'在另一个东西的每个角色之间......

你想要看的东西,更像是

def add_letters(word, number):
    new_word = ''

    for character in word:
        new_word += character
        for _ in range(number):
            new_word += random.choice(string.ascii_letters)

    return new_word

将迭代所提供单词的每个字符,将其添加到new_word字符串,然后根据需要随机选择多个字符并将其添加到new_word,并继续直到原始单词完成后,返回新单词。

答案 3 :(得分:0)

当你进入你的循环时,你的问题一直发生,你总是一次只生成一个随机字符:

letters=''.join(random.choice(string.ascii_letters))

您可能希望以不同的方式查看问题,而是使用随机的另一种方法sample

使用示例,您可以在每次调用时提供所需的随机字符数,它们将是唯一的。这实际上会改变你的循环,而不是迭代number,迭代单词并相应地添加你的字符。

import random
import string

def add_letters(word,number):
    new_word = ""
    for i in word:
        letters = ''.join(random.sample(string.ascii_letters, number))
        new_word += "{}{}".format(i, letters)
    return new_word

通话:

add_letters('cat', 2)

输出:

cNbarHtTM

答案 4 :(得分:0)

import random
import string

def add_letters(word,number):
    """
    Adds "number" randomly selected ASCII letters to the end of "word"
    """

    return word + "".join([random.choice(string.ascii_letters) for k in range(number)])


for i in range(10):
    print(add_letters("foo", i))

[random.choice...]是一个列表理解。它们在Python中是一个非常酷,功能强大的东西,如果你不完全理解代码,我建议你阅读它。

答案 5 :(得分:0)

康纳说,逻辑是关闭的。 尝试并分解问题陈述,看看是否可以找到解决方案。 "添加一些随机字母" - 你能创建这个字符串吗?

"提供的单词中的每个字母。"你能把这个单词拆分成单独的字母吗?