Python将数字转换为不带if语句的字母

2024-10-01 07:43:15 发布

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

我正在为我自己的目的做一个程序(命名程序),完全生成一个随机名称。问题是我不能给一个字母赋值,比如a是1,z是26,或者a是0,z是25。它给了我一个语法错误。我需要赋值,因为随机整数(1,26)触发一个字母(如果随机整数为1,选择a)并打印名称。在

编辑:

我已经实现了你的建议,而且很管用,对此我很感激,但我希望我的程序能创建可读的名称,或者更具程序性。这里有一个在我调整程序后的名字的例子:ddjau。现在这看起来不像一个名字,所以我希望我的程序能像创建真实的名字一样工作,比如塞缪尔或者其他普通的名字。谢谢!在

编辑(2):

谢谢你,亚当,但是我需要一种“种子”让用户输入名字的开头是。(种子=A,名称=亚当。Seed=G,Name=George.)我是否应该在开始时逐行搜索文件?如果是,我该怎么做?在


Tags: 程序目的名称编辑字母整数名字种子
3条回答

chr(参见here)和{}(参见here)是您正在寻找的两个函数(尽管您似乎已经了解了后者)。请访问这些链接以获得更详细的解释。在

第一个是基于整数的一个字符串,第二个是反向操作(从技术上讲,它也处理Unicode,而chr没有,不过如果需要,可以用^{}来处理)。在

您可以基于以下内容编写代码:

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

我不完全确定您要做什么,但您可以将一个数字转换成带有^{} function的字母。chr()采用ASCII代码,因此如果您想使用范围[0,25],您可以这样调整它:

chr(25 + ord('a'))    # 'z'

简短回答
查看Python字典以允许1 = 'a'类型分配。下面我有一个基于性别和一个“垃圾”的随机名字。在

免责声明
我不完全理解(通过代码)您试图用char/ord和一个随机字母来完成什么。另外请注意,我完全不知道您的设计目标或要求,我已经使示例比它可能需要用于教学目的更复杂。在

其他资源
*Python Docs for dictionary
*Using Python dictionary relationship to search both ways

响应上次编辑
如果你想建立一个随机的“真实”名字,我想你最好的选择是使用一个大名单的名字和只是随机选择一个。如果我是你,我会调查一些与人口普查结果相关的东西:males和{a4}。注意那个男人_名称.txt还有女性_名称.txt是在人口普查网站上找到的名单的副本。作为免责声明,我确信有一种更有效的方式来加载/读取文件。就用这个例子作为概念的证明。在

更新
这里有一个快速而肮脏的方法来种子随机值。再一次,我不确定这是最Python的方式或最有效的方式,但它是有效的。在

示例

    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)

输出

^{2}$

相关问题 更多 >