我有这个任务:
编写一个函数
smallnr(x)
,其中x
为x
,0
为{。}}6
和x
之间的整数,它返回数字的名称, 否则它只是将def smallnr(x): if x>6: return str(x) else: lst=['zero','one','two','three','four','five','six'] return (lst[x])
作为字符串返回。
我做了以下事情:
smallnr
这是有效的,但现在我必须这样做:
使用a部分的函数
convertsmall(s)
,编写一个函数s
将文本s
作为输入并返回文本split()
将小数字(0到6之间的整数)转换为它们的数字 名。例如,转变小('我有5个兄弟和2个姐妹,共有7个兄弟姐妹。') “我有五个兄弟和两个姐妹,一共有七个兄弟姐妹。”
我知道我需要以某种方式使用isnumeric()
和{{1}},但我无法弄清楚如何将它们放在一起并仅更改字符串中的数字。
有什么建议吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
所以你想把你传递给convertmall函数的句子串并用空格分割。您可以通过使用字符串并调用.split(' ')
(例如'hello world'.split(' ')
或mystring.split(' ')
)来执行此操作。这将为您提供像['hello', 'world']
然后你需要遍历生成的数组并查找数字或整数然后将它们传递给你的函数并获取字符串值并用字符串值替换数组中的值。
然后,在完成每个单词并转换数字后,您需要将最终数组连接起来。您可以通过' '.join(myArray)
答案 2 :(得分:0)
d={'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six'}
parts = my_string.split() #split into words
new_parts = [d[p] if p in d else p for p in parts] #list comprehension to replace if possible
print " ".join(parts) #rejoin
我认为会起作用
>>> mystring = 'I have 5 brothers and 2 sisters, 7 siblings altogether.'
>>> parts = mystring.split() #split into words
>>> d={'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six'}
>>> new_parts = [d[p] if p in d else p for p in parts] #list comprehension to replace if possible
>>> print " ".join(new_parts) #rejoin
I have five brothers and two sisters, 7 siblings altogether.
答案 3 :(得分:0)
基于正则表达式而不是split()的解决方案:
def convertsmall(s):
out = ''
lastindex=0
for match in re.finditer("\\b(\\d+)\\b", s):
out += s[lastindex:match.start()]
out += smallnr(int(match.group()))
lastindex = match.end()
return out + s[lastindex:]
答案 4 :(得分:0)
这是最简单的方法(在我看来):
def convertsmall(text):
return ' '.join(smallnr(int(word)) if word.isdigit() else word for word in text.split())
输出:
>>> convertsmall('I have 5 brothers and 2 sisters, 7 siblings altogether.')
'I have five brothers and two sisters, 7 siblings altogether.'
要理解这一点,让我们倒退:
list
将字符串分成text.split()
个单词 - 当没有传递参数时,split()使用' '
(空格)作为分隔符来划分字符串。smallnr(int(word)) if word.isdigit() else word
- 如果smallnr()
是数字,则调用word
,否则返回word
不变。word
是一个字符串,我们需要在将它传递给您的函数之前使用int(word)
将其转换为整数,该函数假定x
为整数。word
中的每个text.split()
以生成新列表。我们使用''.join(list)将这个列表中的word
加在一起,用空格分隔。希望明确表示:)