我是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放在FirstName和LastName中,然后放入一些逻辑,这样我就不会得到同样的名字,比如Bradley Bradley?
答案 0 :(得分:1)
我希望程序能够给我每个名字的组合,然后结束。
您应该使用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随机顺序中没有重复,你可以使用random.shuffle
random.shuffle(full_names)
答案 1 :(得分:0)
琐碎的实现:使用名字和姓氏,在选择姓氏时删除可能的冲突选择。遗憾的是 - 由于choice()
实现,需要一种解决方法来从set中获取一个随机元素。因此我们采用单元素样本并使用单元素找到组中的第一个元素。
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)
答案 2 :(得分:0)
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)
答案 3 :(得分:0)
可能是这样的。 " I"定义您期望的组合数量。我试过i = 1000,i = 1000000,结果是一样的:288。
#!/usr/bin/python
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"}
def Name(first_names, last_names):
first = random.sample(first_names, 1)[0]
last = random.sample(last_names - {first}, 1)[0]
return (first + " " + last)
OUT=[]
i=1000
while i > 0:
name=Name(first_names, last_names)
if name not in OUT:
OUT.append(name)
print name
i-=1
print len(OUT), 'unique names generated.'
输出
janet spirits
bradley spirits
axel style
ringo keller
pedro blacker
ringo spirits
...
ally warren
arthur barker
lauren spirits
nicky keller
288 unique names generated.
答案 4 :(得分:0)
对于所有可能的组合,脚本可以是这个。它也给出288.没有随机的东西。
#!/usr/bin/python
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"}
OUT=[]
for a in first_names:
for b in last_names:
name=a+' '+b
if name not in OUT:
OUT.append(name)
print name
print len(OUT), 'unique names generated.'
输出
ashley style
ashley spirits
ashley rogers
...
cal blacker
cal bleacher
cal warren
288 unique names generated.
如果您需要随机名称,可以从OUT中随机选择。
import random
...
random.shuffle(OUT)
if len(OUT)>0:
print OUT[0]
输出
floyd rogers
答案 5 :(得分:0)
它走到了尽头。我为你的项目纠正了一下。此脚本生成下一个脚本使用的文件。
#!/usr/bin/python
import random
''' The script generates "names.txt" containg names, one per line. '''
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"}
OUT=[]
with open('names.txt', 'w') as f:
for a in first_names:
for b in last_names:
name=a+' '+b
if name not in OUT:
OUT.append(name)
f.write(name+'\n')
print len(OUT), 'unique names generated.'
print 'Saved into "names.txt"'
#-----------------------
random.shuffle(OUT)
if len(OUT)>0:
print 'Random name:', OUT[0]
print
此脚本使用前一个脚本生成的文本文件。或者你可以打开" names.txt"在OpenOffice Calc中,将那里的名字洗牌。确保用某些东西标记名称以表明它已被使用。在我的脚本中,标记是一个点。当不再有未使用的名称时,它会退出。
#!/usr/bin/python
import os, sys, random
''' The script uses a text file with names listed one per line. '''
path='names.txt'
L=[]
if os.path.exists(path)==False:
print 'Not found: names.txt'
print 'Exit.'
sys.exit()
else:
f=open('names.txt', 'r')
s=f.read()
f.close()
L=s.split('\n')
random.shuffle(L)
x=len(L)
while x > 0:
i=0
for n in L:
if len(n)>0:
name=n
if name[0] != '.':
print
print name
print
a=raw_input('"y" to use, "n" to skip: ')
if a=='y':
name='.'+name # Marking name as used with a dot
L[i]=name
f=open('names.txt', 'w')
for n in L:
f.write(n+'\n')
f.close()
x -= 1
i += 1
print 'No more names left.'
print 'Exit.'
答案 6 :(得分:-1)
在这个例子中,我生成完整名称的随机组合并检查它们的唯一性。
from random import choice
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"]
surnames = ["barker", "style", "spirits", "murphy", "blacker", "bleacher", "rogers",
"warren", "keller"]
def gen_unique_names(names,surnames,how_many):
answer = []
while how_many > 0:
combo = choice(names)+' '+choice(surnames)
if combo not in answer:
answer.append(combo)
how_many -= 1
return answer
mynamelist = gen_unique_names(names,surnames,20)
for item in mynamelist:
print item
这是输出:
ashley rogers
trudie spirits
lauren barker
floyd blacker
lauren bleacher
gina spirits
paul style
jax blacker
bradley murphy
ringo style
carl warren
carl spirits
cam murphy
lydia spirits
jax murphy
carl murphy
bradley style
lorraine blacker
charlie murphy
nicky barker