我正在为自己的目的制作一个程序(一个命名程序),它完全生成一个随机名称。问题是我无法为一个字母分配一个数字,因此a为1,z为26,或者为0,z为25.它给出了一个SyntaxError。我需要分配这个,因为随机整数(1,26)触发一个字母(如果随机整数是1,选择A)并打印名称。
编辑:
我已经实施了您的建议,并且它有效,我很感激,但我希望我的程序创建可读的名称,或更多的程序。这是我调整程序后的名称示例:ddjau。现在这看起来不像一个名字,所以我希望我的程序可以像创建真实的名字一样工作,比如塞缪尔或其他常见的名字。谢谢!
编辑(2):
谢谢,Adam,但是我需要一种'种子'供用户输入名称的开头。 (种子= A,姓名=亚当。种子= G,姓名=乔治。)我应该通过一行逐行搜索文件来做到这一点吗?如果是这样,我该怎么做?
答案 0 :(得分:2)
chr
(请参阅here)和ord
(请参阅here)是您正在寻找的两个功能(尽管您似乎已经了解了后者) 。请按照这些链接获取更详细的说明。
第一个给出一个基于整数的单字符字符串,第二个字符串执行反向操作(从技术上讲,它也处理Unicode,chr
没有,但unichr
如果你需要的话)。
您可以将代码基于以下内容:
ch = "E"
print ord (ch) - ord ("A") + 1 # should give 5 for the fifth letter
val = 7
print chr (val + ord ("A") - 1) # should give G, the seventh letter
答案 1 :(得分:2)
简答
查看Python词典以允许1 = 'a'
类型分配。下面我有一个工作示例,它会生成一个基于性别和“垃圾”的随机名称。
<强>声明强>
我不完全理解(通过代码)你想用char / ord和随机字母完成什么。还要注意完全不知道你的设计目标或要求,我已经使这个例子比教学目的更复杂。
其他资源
* Python Docs for dictionary
* Using Python dictionary relationship to search both ways
回复上次修改
如果你想建立随机的'真实'名字,我认为你最好的选择是使用一大堆名字,然后选择一个随机名称。如果我是你,我会查看与人口普查结果相关的内容:males和females。请注意,male_names.txt和female_names.txt是在人口普查网站上找到的列表的副本。作为免责声明,我确信有一种更有效的方式来加载/读取文件。只需使用此示例作为概念证明。
<强>更新强>
这是种子随机值的快速而肮脏的方法。我不确定这是最狡猾的方式还是最有效的方式,但它确实有效。
示例
import random
import time
def get_random_name(gender, seed):
if(gender == 'male'):
file = 'male_names.txt'
elif(gender == 'female'):
file = 'female_names.txt'
fid = open(file,'r')
names = []
total_names = 0
for line in fid:
if(line.lower().startswith(seed)):
names.append(line)
total_names = total_names + 1
random_index = random.randint(0,total_names)
return names[random_index]
if (__name__ == "__main__"):
print 'Welcome to Name Database 2.2\n'
print '1. Boy'
print '2. Girl'
bog = raw_input('\nGender: ')
print 'What should the name start with?'
print 'A, Ab, Abc, B, Ba, Br, etc...'
print ''
l = raw_input('Leter(s): ').lower()
new_name = ''
if bog == '1': # Boy
print get_random_name('male',l)
elif bog == '2':
print get_random_name('female',l)
输出
Welcome to Name Database 2.2
1. Boy
2. Girl
Gender: 2
What should the name start with?
A, Ab, Abc, B, Ba, Br, etc...
Leter(s): br
BRITTA
答案 2 :(得分:0)
我不完全确定您要做的是什么,但您可以使用chr()
function将数字转换为字母。 chr()
采用ASCII码,所以如果你想使用范围[0,25],你可以这样调整它:
chr(25 + ord('a')) # 'z'