1

我有这个任务:

编写一个函数smallnr(x),它接受一个数字x,如果x是一个整数06它返回数字的名称,否则它只是x作为字符串返回。

我做了以下事情:

def smallnr(x):
    if x>6:
        return str(x)
    else:
        lst=['zero','one','two','three','four','five','six']
        return (lst[x])

这行得通,但现在我必须这样做:

使用smallnra 部分中的函数,编写一个函数 ,该函数convertsmall(s)将文本作为输入,s并返回 s转换为名称的小数字(0 到 6 之间的整数)的文本。例如,

convertsmall('我有 5 个兄弟和 2 个姐妹,共有 7 个兄弟姐妹。') '我有 5 个兄弟和 2 个姐妹,共有 7 个兄弟姐妹。'

我知道我需要以某种方式使用split()isnumeric()但我不知道如何将它们放在一起并仅更改字符串中的数字。

有什么建议吗?

4

5 回答 5

0
  1. 拆分句子(在空格上)
  2. 遍历单词(来自拆分)
  3. 如果单词 isumeric 将其替换为函数的结果
  4. 让他们重新聚在一起
  5. 返回结果
于 2012-10-03T23:39:26.593 回答
0

所以你想把你传递给 convertsmall 函数的句子字符串用空格分割。您可以通过获取您的字符串并调用.split(' ')(例如'hello world'.split(' ')mystring.split(' '))来做到这一点。这将为您提供一个拆分数组,例如['hello', 'world']

然后您需要遍历生成的数组并查找数字或整数,然后将它们传递给您的函数并获取字符串值并将数组中的值替换为字符串值。

完成每个单词并转换数字后,您需要连接最终的数组。你可以这样做' '.join(myArray)

于 2012-10-03T23:42:19.983 回答
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.
于 2012-10-03T23:42:39.167 回答
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:]
于 2012-10-04T00:14:31.793 回答
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.'

为了理解这一点,让我们倒退一下:

  1. 使用 -将字符串划分为一个list单词text.split()- 当没有传递参数时, split() 使用' '(space) 作为分隔符来划分字符串。
  2. smallnr(int(word)) if word.isdigit() else wordsmallnr()-如果word是数字则调用,否则返回word不变。
  3. 由于word是一个字符串,我们需要在将其int(word)传递给您的函数之前将其转换为整数,该函数假定x为整数。
  4. 整个短语是一个列表理解,它处理每个word输入text.split()以产生一个新列表。我们word使用 ' '.join(list) 将列表中的 s 连接在一起,用空格分隔。

希望说明清楚:)

于 2012-10-04T00:33:32.173 回答