4 回答
TA贡献1719条经验 获得超6个赞
这将实现您所描述的内容。您可以通过将选项放入一个整体列表中而不是使用多个不同的变量来使代码更加整洁,但是您必须明确处理第六个和第七个字母相同的事实;不能仅仅因为每个人都有相同的选择就保证它们是相同的。
该列表choices_list可以包含每个原始代码的子列表,但是当您选择单个字符时,它在使用时将与字符串同等工作random.choice,这也使代码更加整洁。
import random
choices_list = [
'A',
'abcdefghijklmnopqrstuvwxyz',
'aeiouy',
'abcdefghijklmnopqrstuvwxyz',
'aeiouy',
'abcdefghijklmnopqrstuvwxyz',
'eiouy'
]
letters = [random.choice(choices) for choices in choices_list]
word = ''.join(letters[:6] + letters[5:]) # here the 6th letter gets repeated
print(word)
一些示例输出:
Alaeovve
Aievellu
Ategiwwo
Aeuzykko
TA贡献1797条经验 获得超6个赞
这是语法修复:
print(["".join([first, second, third])
for first in firsts
for second in seconds
for third in thirds])
此方法可能会占用大量内存。
TA贡献1155条经验 获得超0个赞
有几件事需要考虑。首先,该str.join()方法接受一个可迭代对象(例如 a list),而不是一堆单独的元素。正在做
''.join([first, second, third, fourth, fifth])
修复了这方面的程序。如果您使用的是 Python 3,print()则 是一个函数,因此您应该在整个列表推导式周围添加括号。
摆脱语法障碍,让我们来解决一个更有趣的问题:您的程序构造每个(82255680!)可能的单词。这需要很长的时间和记忆。您想要的可能只是选择一个。当然,您可以通过首先构建所有,然后随机选择一个来做到这一点。firsts不过,从、seconds等中随机挑选一个字母然后收集这些字母要便宜得多。那么大家一起:
import random
firsts = ['A']
seconds = ['a','b','c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
thirds = ['a', 'e', 'i', 'o', 'u', 'y']
fourths = ['a','b','c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
fifths = ['a', 'e', 'i', 'o', 'u', 'y']
sixths = sevenths = ['a','b','c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
eighths = ['e', 'i', 'o', 'u', 'y']
result = ''.join([
random.choice(firsts),
random.choice(seconds),
random.choice(thirds),
random.choice(fourths),
random.choice(fifths),
random.choice(sixths),
random.choice(sevenths),
random.choice(eighths),
])
print(result)
要从此处改进代码,请尝试:
找到一种比显式写出“数据”更简洁的方法来生成“数据”。举个例子:
import string
seconds = list(string.ascii_lowercase) # you don't even need list()!
不要使用单独的变量firsts、seconds等,而是将它们收集到单个变量中,例如将list每个原件list作为单个变量包含的单个变量str,并包含所有字符。
TA贡献1871条经验 获得超13个赞
尝试这个:
import random
sixth=random.choice(sixths)
s='A'+random.choice(seconds)+random.choice(thirds)+random.choice(fourths)+random.choice(fifths)+sixth+sixth+random.choice(eighths)
print(s)
输出:
Awixonno
Ahiwojjy
etc
添加回答
举报