如何获取字符串中每个字符的ord(unicode)?

时间:2019-05-20 08:52:07

标签: python

我正在尝试获取一个函数,以获取字符串并以Unicode代码(用空格分隔)打印字符串中的每个字符。这就是我所能得到的:

def get_ords(s):
    """
    >>> get_ords('abc')
    '97 98 99 '
    >>> get_ords('a b c')
    '97 32 98 32 99 '
    """
    for ch in s:
        return ord(ch)

这给了我输出:

Expected:
    '97 98 99 '
Got:
    97

Expected:
    '97 32 98 32 99 '
Got:
    97

我不知道如何获得每个?我曾想过使用str.split(),但我认为这无法正常工作。

我将不胜感激。

5 个答案:

答案 0 :(得分:3)

return退出该函数,因此您应该创建一个列表并继续附加到该列表:

def get_ords(s):
    """
    >>> get_ords('abc')
    '97 98 99 '
    >>> get_ords('a b c')
    '97 32 98 32 99 '
    """
    l = []
    for ch in s:
        l.append(str(ord(ch)))
    return ' '.join(l)

更好:

def get_ords(s):
    """
    >>> get_ords('abc')
    '97 98 99 '
    >>> get_ords('a b c')
    '97 32 98 32 99 '
    """
    return ' '.join([str(ord(ch)) for ch in s])

或者不进行调用,print并假设使用python 3(只需在python 2中的文件顶部添加一个from __future__ import print_function):

def get_ords(s):
    """
    >>> get_ords('abc')
    '97 98 99 '
    >>> get_ords('a b c')
    '97 32 98 32 99 '
    """
    for ch in s:
        print(ord(ch), end=' ')
    print()

并再次假设使用python 3(如果在文件顶部的from __future__ import print_function是python 2,则与上述操作相同):

def get_ords(s):
    """
    >>> get_ords('abc')
    '97 98 99 '
    >>> get_ords('a b c')
    '97 32 98 32 99 '
    """
    [print(ord(ch), end=' ') for ch in s]

现在在前两种情况下:

print(get_ords('abc'))

输出:

97 98 99

现在在最后两种情况下:

get_ords('abc')

输出:

97 98 99

答案 1 :(得分:2)

return在一个函数中仅被调用一次。

您可以

  1. 创建一个存储所有输出的局部变量,如下所示:
def get_ords(s):
    """
    >>> get_ords('abc')
    '97 98 99 '
    >>> get_ords('a b c')
    '97 32 98 32 99 '
    """
    ret = []
    for ch in s:  
        ret.append(ord(ch))
    return ' '.join(ret)  # or skip the for loop using a list comprehension here
  1. 使用yield定义生成器
def get_ords(s):
    """
    >>> get_ords('abc')
    '97 98 99 '
    >>> get_ords('a b c')
    '97 32 98 32 99 '
    """
    yield ord(ch)

x = get_ords(s)

for y in x:
    print(y)

答案 2 :(得分:1)

学习理解的好时机。它们不仅编写时间短,而且与迭代增长数组相比通常更高效:

def get_ords(s):
    """
    >>> get_ords('abc')
    '97 98 99 '
    >>> get_ords('a b c')
    '97 32 98 32 99 '
    """
    return ' '.[ord(c) for s in c]

答案 3 :(得分:1)

您可以简单地执行以下操作:

def get_ords(s):
    return ' '.join([str(ord(ch)) for ch in s])

答案 4 :(得分:1)

正如已经指出的那样,您可以使用列表理解。如前所述,每个函数运行中仅执行一个return,因此,如果您希望触发返回不止一次,则需要以递归方式排列函数,即:

def get_ords(s):
    if len(s)>=2:
        return f"{ord(s[0])} "+get_ords(s[1:])
    else:
        return f"{ord(s[0])}"
print(get_ords('abc')) # 97 98 99
print(get_ords('a b c')) # 97 32 98 32 99

以上代码使用Python 3.6及更高版本中提供的所谓的f字符串(tutorial)。当然,这比列表理解方法的可读性差得多,但是在某些用例中,递归很有用。