我正在尝试获取一个函数,以获取字符串并以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()
,但我认为这无法正常工作。
我将不胜感激。
答案 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
在一个函数中仅被调用一次。
您可以
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
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)。当然,这比列表理解方法的可读性差得多,但是在某些用例中,递归很有用。