Python—不使用if语句将数字转换为字母

Python—不使用if语句将数字转换为字母,python,string,variables,integer,Python,String,Variables,Integer,我正在为我自己的目的制作一个程序(命名程序),完全生成一个随机名称。问题是我不能给一个字母赋值,所以a是1,z是26,或者a是0,z是25。它给了我一个语法错误。我需要分配它,因为随机整数(1,26)触发一个字母(如果随机整数是1,选择a)并打印名称 编辑: 我已经实现了你的建议,它是有效的,对此我很感激,但我希望让我的程序创建可读的名称,或者更程序化的名称。下面是我调整程序后的一个名称示例:ddjau。现在这看起来不像一个名字,所以我希望我的程序能够像创建真实姓名一样工作,比如Samuel或其

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

编辑:

我已经实现了你的建议,它是有效的,对此我很感激,但我希望让我的程序创建可读的名称,或者更程序化的名称。下面是我调整程序后的一个名称示例:ddjau。现在这看起来不像一个名字,所以我希望我的程序能够像创建真实姓名一样工作,比如Samuel或其他普通姓名。谢谢

编辑(2):

谢谢,Adam,但我需要一种“种子”供用户输入名称的开头。(Seed=A,Name=Adam.Seed=G,Name=George。)我应该从一开始就逐行搜索文件吗?如果是这样,我该怎么做?

chr
(请参阅)和
ord
(请参阅)是您正在寻找的两个函数(尽管您似乎已经知道后者)。请按照这些链接进行更详细的解释

第一个是基于整数的一个字符串,第二个是反向操作(从技术上讲,它也处理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

我不完全确定你们想做什么,但你们可以把一个数字转换成一个字母
chr()
采用ASCII码,因此,如果您想使用范围[0,25],您可以这样调整它:

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

简短回答
查看Python字典以允许
1='a'
类型分配。下面我有一个工作示例,它会根据性别和“垃圾”生成一个随机名称

免责声明
我不完全理解(通过代码)您试图用char/ord和随机字母实现什么。另外请注意,我完全不知道您的设计目标或要求,因此我将示例制作得比用于教学目的可能需要的更复杂

其他资源
*
*

响应上一次编辑
如果你想建立一个随机的“真实”名字,我认为你最好的选择是使用一个大的名字列表,然后选择一个随机的名字。如果我是你,我会调查一些与人口普查结果相关的东西:和。请注意,male_names.txt和female_names.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)
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
输出

    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

我将提供语法错误方面的帮助,并让其他人回答您的问题。语句
1='a'
将为您提供一个
SyntaxError
,因为您正试图分配给文本1。只能指定给变量。仅供参考。:)你真的有130个变量?听说过字符串、列表和循环吗?你只是在寻找一种获得随机字母的方法吗?尝试从随机导入选项中选择
然后选择([chr(c)表示范围内的c(ord(“a”),[ord(“z”)+1)],
或者如果您喜欢较短的代码(但这是一个hack):
选择(“abcdefghijklmnopqrstuvwxyz”)
如果这是生产代码,我们将拥有一些值得我们使用的DWTF:x还需要注意的是,我们显然可以用“a”-“z”来称呼randint,而不是整个
+'a'
东西。我使用的是ord,但它可以找到字母在字母表中的位置,而不是将字母指定给字母表中的某个位置。我还没有试过chr,你能给我简单解释一下它的用途吗?@Rob,我把链接做得更明显了一些,这样你就可以查看这些链接的全部细节,但我在最后还添加了一个小片段。谢谢!这正是我想要的!这很有效,但我需要一种“种子”作为起始字母在F中,种子是弗雷德,或者M是马修。可能需要一段代码来搜索所有行中的第一个字母“seed”。谢谢