1

我有这个函数,它将名称作为输入,将其放入列表中,然后针对它运行 ord()。但是,我遇到了一些(我相信的)格式问题。我试图让它看起来像这样:

b = (ascii value)
a = (ascii value)
t = (ascii value)
m = (ascii value)
a = (ascii value)
n = (ascii value)

我的名称显示正确,但是 ascii 值显示如下:

b = [98, 97, 116, 109, 97, 110]
a = [98, 97, 116, 109, 97, 110]
t = [98, 97, 116, 109, 97, 110]
m = [98, 97, 116, 109, 97, 110]
a = [98, 97, 116, 109, 97, 110]
n = [98, 97, 116, 109, 97, 110]

不知道我哪里出错了,下面是我为它制作的代码:

def x():
     name = requestString("name")
     usersName = list(name)
     ascii = [orc(c) for c in usersName]
     for name in name: 
          print name, "=", ascii 

谢谢!

编辑:谢谢,真的很感激。马上找出我哪里出错了!

4

5 回答 5

1

asciiord所有字符的列表。要将它们与它们所代表的字符配对,请使用zip

for num, char in zip(ascii, name):
    print "'{0}'={1}".format(char, num)
于 2014-03-24T23:18:12.970 回答
1

以下是对您出错的地方的一些评论:

def x():
     name = requestString("name")
     usersName = list(name)
     ascii = [orc(c) for c in usersName] # here's the list
     for name in name: 
          print name, "=", ascii # and you're printing it here everytime

你可以像这样更pythonically修复:

def x():
     name = requestString("name")
     # usersName = list(name) # no need for this line, you can iterate over the string
     ascii = [orc(c) for c in name] #so this is just name
     for i, c in enumerate(name):  # use c for your character var name, 
          print c, "=", ascii[i]   # and enumerate provides the index

由于您没有返回任何内容,因此无需创建列表,您不妨即时提供 ord(c) :

def print_ords_of_word(name):
    for c in name:
        print c, '=', ord(c)
于 2014-03-24T23:18:22.033 回答
1

您可以在一个循环中完成它:

for item in name:
    print item, "=", ord(item)

演示:

>>> def x(name):
...      for item in name:
...           print item, "=", ord(item)
... 
>>> x('batman')
b = 98
a = 97
t = 116
m = 109
a = 97
n = 110
于 2014-03-24T23:18:24.583 回答
0

[ord(c) for c in usersName]是 中字母的所有ord值的列表usersName。这不是你想在信旁边放的东西——你只想放那个。

你可以这样做:

def x():
    name = requestString("name")
    ascii = {letter:ord(letter) for letter in name}
    for letter in name:
        print(letter+" = "+ascii[letter])
        # or use string formatting which is better

或者只是:

def x():
    name = requestString("name")
    for letter in name:
        print(letter+" = "+ord(letter))
于 2014-03-24T23:18:44.267 回答
0

您得到了一个列表,因为您使用列表推导将整个 usersName 转换为一个 ords 列表。这可以写在一行中:

print "\n".join("{0} = {1}".format(c, ord(c)) for c in name)

字符串的 join 方法采用序列或迭代器,并使用字符串的原始内容(在本例中为 \n)分隔每个项目。

join 调用中的 for 循环创建了一个生成器,您可以将其视为列表理解,如果它可以帮助您更好地理解(但实际上并非如此)。

于 2014-03-24T23:21:37.467 回答