Python - 在没有if语句的情况下将数字转换为字母

时间:2011-09-23 23:14:06

标签: python string variables integer

我正在为自己的目的制作一个程序(一个命名程序),它完全生成一个随机名称。问题是我无法为一个字母分配一个数字,因此a为1,z为26,或者为0,z为25.它给出了一个SyntaxError。我需要分配这个,因为随机整数(1,26)触发一个字母(如果随机整数是1,选择A)并打印名称。

编辑:

我已经实施了您的建议,并且它有效,我很感激,但我希望我的程序创建可读的名称,或更多的程序。这是我调整程序后的名称示例:ddjau。现在这看起来不像一个名字,所以我希望我的程序可以像创建真实的名字一样工作,比如塞缪尔或其他常见的名字。谢谢!

编辑(2):

谢谢,Adam,但是我需要一种'种子'供用户输入名称的开头。 (种子= A,姓名=亚当。种子= G,姓名=乔治。)我应该通过一行逐行搜索文件来做到这一点吗?如果是这样,我该怎么做?

3 个答案:

答案 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

回复上次修改
如果你想建立随机的'真实'名字,我认为你最好的选择是使用一大堆名字,然后选择一个随机名称。如果我是你,我会查看与人口普查结果相关的内容:malesfemales。请注意,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'