<p>我建议尝试使用一个普通名字列表作为随机化过程的输入。例如,有一个大的名称列表<a href="http://www.gutenberg.org/files/3201/files/NAMES.TXT" rel="nofollow noreferrer">here</a></p>
<p>一种方法是简单地将名称分成若干部分,然后随机地重新组合它们。下面是一个简单的实现,它只需保留可能包含重复项的列表,即可有效地对各种字符组合进行加权:</p>
<pre><code>from collections import defaultdict
from random import choice, randint
starts = []
middles = defaultdict(list)
ends = []
# Read through a list of names
with open('names.txt', 'r') as infile:
for name in infile:
name = name.lower().strip()
# Keep track of all the beginnings
starts.append(name[:3])
# Lookup table of next characters
for i in range(len(name) - 3):
middles[name[i:i+2]].append(name[i+2])
# Keep track of all the endings
ends.append(name[-2:])
for _ in range(20):
# Randomly choose a start of a name
name = choice(starts)
# Randomly insert some middle characters based upon what we already have
for _ in range(randint(0, 2)):
name += choice(middles.get(name[-2:], ['']))
# Randomly choose the end of a name
name += choice(ends)
# See what we got
print(name.title())
</code></pre>
<p>还有我得到的名单:</p>
<pre><code>Pophita
Perst
Osbail
Venctno
Cyntne
Clast
Progie
Nadrich
Emaan
Ruser
Darna
Tallett
Casier
Zithan
Brune
Noble
Shude
Katiend
Donnda
Valoe
</code></pre>