我需要编写一个程序,在所提供的单词中的每个字母后面添加一些随机字母。
这就是我所拥有的:
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个字母,即使我给它一个不同的数字。此外,在单词中的每个字母后面总是相同的“随机”字母。
知道我做错了吗?
答案 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
被删除''.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)
康纳说,逻辑是关闭的。 尝试并分解问题陈述,看看是否可以找到解决方案。 "添加一些随机字母" - 你能创建这个字符串吗?
"提供的单词中的每个字母。"你能把这个单词拆分成单独的字母吗?