如何使用python进行字母到数字的直接替换?

如何使用python进行字母到数字的直接替换?,python,python-2.7,Python,Python 2.7,我试图将输入的用户名(Rex Ryan)转换为6个字符的名称(ryanre),并将其更改为编号的ID(a=01,B=02,…,Z=26) 我尝试用以下方法将全名转换为6个字符的名称: def converter(): first = raw_input('What is the first name of the user? ') last = raw_input('What is the last name of the user? ') first[0:2] = fi

我试图将输入的用户名(Rex Ryan)转换为6个字符的名称(ryanre),并将其更改为编号的ID(a=01,B=02,…,Z=26)

我尝试用以下方法将全名转换为6个字符的名称:

def converter():
    first = raw_input('What is the first name of the user? ')
    last = raw_input('What is the last name of the user? ')
    first[0:2] = firstname
    last[0:4] = lastname
    user = lastname + firstname
    print user

当我运行它时,我不断得到“firstname未定义”。任何指导或阅读都会有帮助;我想主要靠我自己做这件事。如果我想让它为我写,我可以下载一些东西。

你应该这样做:

def converter():
    first = raw_input('What is the first name of the user? ')
    last = raw_input('What is the last name of the user? ')
    firstname = first[0:2]
    lastname =  last[0:4]
    user = lastname + firstname
    print user
要生成ID,您可以执行以下操作:

def converter():
    first = raw_input('What is the first name of the user? ')
    last = raw_input('What is the last name of the user? ')
    firstname = first[0:2]
    lastname =  last[0:4]
    user = lastname + firstname
    print user
ascii_小写字母中找到每个字母的索引,并将所有字母的索引递增1,然后将它们串联起来:

In [5]: from string import ascii_lowercase

In [6]: ascii_lowercase
Out[6]: 'abcdefghijklmnopqrstuvwxyz'

In [7]: ''.join("{0:02}".format(ascii_lowercase.index(x)+1) for x in 'ryanre')
Out[7]: '182501141805'

你应该这样做:

def converter():
    first = raw_input('What is the first name of the user? ')
    last = raw_input('What is the last name of the user? ')
    firstname = first[0:2]
    lastname =  last[0:4]
    user = lastname + firstname
    print user
要生成ID,您可以执行以下操作:

def converter():
    first = raw_input('What is the first name of the user? ')
    last = raw_input('What is the last name of the user? ')
    firstname = first[0:2]
    lastname =  last[0:4]
    user = lastname + firstname
    print user
ascii_小写字母中找到每个字母的索引,并将所有字母的索引递增1,然后将它们串联起来:

In [5]: from string import ascii_lowercase

In [6]: ascii_lowercase
Out[6]: 'abcdefghijklmnopqrstuvwxyz'

In [7]: ''.join("{0:02}".format(ascii_lowercase.index(x)+1) for x in 'ryanre')
Out[7]: '182501141805'

你的陈述是反向的:

firstname = first[0:2]

至于将返回值转换为数字序列,请查看。它将执行您正在描述的映射。

您的语句是反向的:

firstname = first[0:2]

至于将返回值转换为数字序列,请查看。它将执行您正在描述的映射。

您可以使用
split
将名称作为单个字符串输入,
upper
将其转换为单个大小写,然后将
ord
与偏移值(提示:substract
ord('a')
)结合使用,以获得您要查找的每个字符的数值。然后,在构建输出字符串时,您需要查看字符串格式,以将单个数字值填充为前导0。

您可以使用
split
将名称作为单个字符串输入,
upper
将其转换为单个大小写,然后将
ord
与偏移值结合使用(提示:substract
ord('a'))
)获取每个字符所需的数值。然后,在构建输出字符串时,您需要查看字符串格式,以将单个数字值填充到前导0。

您还可以生成一个dict用作查找。首先创建一个要用于ID的整数列表(这里从0开始)

BIF
chr()
与其他答案中已经提到的
ord()
相反


您还可以生成一个dict用作查找。首先创建一个要用于ID的整数列表(这里从0开始)

BIF
chr()
与其他答案中已经提到的
ord()
相反


谢谢,解决了我的一个问题。至于数字,这只会变成ASCII值还是UNICODE?如果是这样,有没有一种方法可以使用dictionary或maketrans进行直接替换?我得到的结论是maketrans,尽管它不允许我使用01,因为它是直接的,字符对字符替换。@elock37--我不确定你想用unicode做什么。看看我贴的链接。它描述了
ord
对unicode字符的作用。使用dict,很容易替换:
d={'a':'00',…};s='';对于以你的名字命名的c:s+=d[c]
(如果你愿意,可以简化得更多)。我确实看了。作战需求文件似乎无法进行替换。ord('a')返回97,a的ASCII表值。ord('a')-96返回1。我需要它返回01。@elock37--对不起,你可以做一个简单的转换
ord('a')-96
ord('b')-96
,等等。当然,这个移位将把大写字符作为负数。。。您打算区分大小写吗?@mgilson我计划在转换用户字符串之前将其转换为小写。但是,减法不会返回我需要的两个字符的数字,因为所有用户ID都是12个字符。谢谢,修复了我的一个问题。至于数字,这只会变成ASCII值还是UNICODE?如果是这样,有没有一种方法可以使用dictionary或maketrans进行直接替换?我得到的结论是maketrans,尽管它不允许我使用01,因为它是直接的,字符对字符替换。@elock37--我不确定你想用unicode做什么。看看我贴的链接。它描述了
ord
对unicode字符的作用。使用dict,很容易替换:
d={'a':'00',…};s='';对于以你的名字命名的c:s+=d[c]
(如果你愿意,可以简化得更多)。我确实看了。作战需求文件似乎无法进行替换。ord('a')返回97,a的ASCII表值。ord('a')-96返回1。我需要它返回01。@elock37--对不起,你可以做一个简单的转换
ord('a')-96
ord('b')-96
,等等。当然,这个移位将把大写字符作为负数。。。您打算区分大小写吗?@mgilson我计划在转换用户字符串之前将其转换为小写。然而,减法不会返回我需要的两个字符的数字,因为所有用户ID都是12个字符。您的
连接
行需要首先
格式化
生成的字符串,以便在OP查找时,a-I在输出中有一个前导0。您的
连接
行需要首先
格式化
生成的字符串,以便A-I将在OP正在查找的输出中有一个前导0。如果这是作业,您应该在问题中指定。这似乎是两个问题:“为什么我的六个字符的名字生成器崩溃?”和“如何将字符串转换为编号的ID?”。请每个帖子只问一个问题;否则,回答者会迷失方向,就像在抓取游戏中同时扔两个网球时狗会感到困惑一样。如果这是作业,你应该在问题中明确说明。这似乎是两个问题:“为什么我的六个字符的名字生成器会崩溃?”和“我如何将字符串转换为数字ID?”。请问o