python随机名称生成器,无需重复

2024-05-08 03:51:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python非常陌生,正在开发一个随机名称生成器。在

我取名字姓氏字符串并随机组合。在

我的问题是我经常得到相同的名字。不过,我希望程序能给我所有的名字组合。以下是基本程序:

import random
FirstName = "jay", "jim", "roy", "axel", "billy", "charlie", "jax", "gina", "paul",
"ringo", "ally", "nicky", "cam", "ari", "trudie", "cal", "carl", "lady", "lauren",
"ichabod", "arthur", "ashley", "drake", "kim", "julio", "lorraine", "floyd", "janet",
"lydia", "charles", "pedro", "bradley"
LastName = "barker", "style", "spirits", "murphy", "blacker", "bleacher", "rogers",
"warren", "keller"
First = random.choice(FirstName)
Last = random.choice(LastName)
print (First + " " + Last)

我想我刚刚意识到我的第二个问题。有些名字可以是姓,反之亦然。例如,Bradley可以是名字和姓氏。有没有可能把布拉德利的名字和姓氏,然后再加上一些逻辑,这样我就永远得不到和布拉德利·布拉德利一样的确切名字了吗?在


Tags: 字符串import程序名称randomfirstname名字first
3条回答

I want the program to give me every combination of names and then ending.

不要使用random,您应该使用for循环迭代组合,或者使用列表理解,过滤掉第一个和最后一个相同的不需要的结果,请参见https://docs.python.org/2/library/itertools.html#itertools.product

from itertools import product

first_name = "jay", "jim", "roy", "axel", "billy", "charlie", "jax", "gina", "paul",
"ringo", "ally", "nicky", "cam", "ari", "trudie", "cal", "carl", "lady", "lauren",
"ichabod", "arthur", "ashley", "drake", "kim", "julio", "lorraine", "floyd", "janet",
"lydia", "charles", "pedro", "bradley"
last_name = "barker", "style", "spirits", "murphy", "blacker", "bleacher", "rogers",
"warren", "keller"

full_names = ["{} {}".format(f, l) for f, l in product(first_name, last_name) if f != l]

如果您希望它们以psuedo随机顺序无重复,您可以使用随机洗牌在

^{pr2}$
import random
first_name = "jay", "jim", "roy", "axel", "billy", "charlie", "jax", "gina", "paul",
"ringo", "ally", "nicky", "cam", "ari", "trudie", "cal", "carl", "lady", "lauren",
"ichabod", "arthur", "ashley", "drake", "kim", "julio", "lorraine", "floyd", "janet",
"lydia", "charles", "pedro", "bradley"
last_name = "barker", "style", "spirits", "murphy", "blacker", "bleacher", "rogers",
"warren", "keller"

_all = [ f + " " + l for f in first_name for l in last_name ]

for i in xrange(len(_all)): # print a few choices
    print random.choice(_all)

简单实现:对名字和姓氏使用集合,在选择姓氏时删除可能冲突的选择。不幸的是-由于choice()实现,需要一个解决方法来从集合中获取一个随机元素。所以我们取单元素样本,并使用单元素组中的第一个元素。在

import random
first_names = {"jay", "jim", "roy", "axel", "billy", "charlie", "jax", "gina", "paul", "ringo", "ally", "nicky", "cam", "ari", "trudie", "cal", "carl", "lady", "lauren", "ichabod", "arthur", "ashley", "drake", "kim", "julio", "lorraine", "floyd", "janet", "lydia", "charles", "pedro", "bradley"}
last_names = {"barker", "style", "spirits", "murphy", "blacker", "bleacher", "rogers", "warren", "keller"}

first = random.sample(first_names, 1)[0]
last = random.sample(last_names - {first}, 1)[0]
print (first + " " + last)

相关问题 更多 >