0

我正在尝试将输入的用户名 (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

运行它时,我不断收到“未定义名字”。任何方向或阅读都会有所帮助;我想主要靠自己做这件事。如果我想为我写的,我可以下载一些东西。

4

4 回答 4

4

你有你的陈述倒退:

firstname = first[0:2]

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

于 2012-09-27T13:40:26.697 回答
2

你应该这样做:

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,您可以执行以下操作:

找到每个字母的索引ascii_lowercase并将它们全部递增 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'
于 2012-09-27T13:40:26.353 回答
0

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

t = 'ryanre'
num = list(range(25))

BIF与其他答案中已经提到chr()的相反。阅读这里的功能ord()

alpha = list(map(chr, range(97, 123)))
db = dict(zip(alpha,a)) # merge the lists into a dict
trasltd = [db[x] for x in t] 
res = ''.join(str(x) for x in trasltd) # merge the elements of the list
于 2012-09-27T13:58:10.837 回答
0

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

于 2012-09-27T13:43:57.073 回答