第n个单词在文本中

时间:2010-12-21 00:07:56

标签: python string

如何在文本中找到第n个单词。

示例:

my_txt("hello to you all" , 3)

all

我不想使用任何内置功能......这不是作业:D

5 个答案:

答案 0 :(得分:10)

显而易见的方法是:

"hello to you all".split()[3]

80年代的方法是 - 也就是说,你必须走完文本,记下你发现的事情的状态 - 可能会比这更好,但这就是想法。 Perceive必须使用很多“内置”功能。我只是避免那些像上面一样直接的那些。

def my_txt(text, target):
    count = 0
    last_was_space = False
    start = end = 0
    for index, letter in enumerate(text):
        if letter.isspace():
            if not last_was_space:
                 end = index
            last_was_space = True
        elif last_was_space:
            last_was_space = False
            count += 1
            if count > target:
                return text[start:end]
            elif count == target:
                start = index
    if count == target:
        return text[start:].strip()
    raise ValueError("Word not found")

答案 1 :(得分:2)

由于所有都是以某种方式内置的功能,我会忽略你不想使用内置功能的声明。

def my_txt(text, n):
    return text.split()[n]

这样做的主要缺点是你会得到标点符号。我把它留作练习来弄清楚如何摆脱它。 :)

答案 2 :(得分:2)

好的,你问过这件事。你需要一个“拆分成单词”的功能。这里是。假设“单词”由空格分隔。

没有内置功能,没有导入任何东西,没有内置类型的方法,甚至没有像+=这样的内裤腰部。它已经过测试。

C:\junk>\python15\python
Python 1.5.2 (#0, Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)] on win32
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> def mysplit(s):
...     words = []
...     inword = 0
...     for c in s:
...         if c in " \r\n\t": # whitespace
...             inword = 0
...         elif not inword:
...             words = words + [c]
...             inword = 1
...         else:
...             words[-1] = words[-1] + c
...     return words
...
>>> mysplit('')
[]
>>> mysplit('x')
['x']
>>> mysplit('foo')
['foo']
>>> mysplit('  foo')
['foo']
>>> mysplit('  foo    ')
['foo']
>>> mysplit('\nfoo\tbar\rzot ugh\n\n   ')
['foo', 'bar', 'zot', 'ugh']
>>>

答案 3 :(得分:1)

首先让我说我绝对同意评论和其他答案,不使用内置函数是愚蠢的。话虽这么说,我发现尝试使用内置的函数调用来编写这段代码是一个有趣的挑战,所以我会发布我想出的东西。

def my_txt(txt, n, i=0):
    if n == 1:
        r = ""
        s = 0
        for c in txt:
            if s >= i:
                if c == " ":
                    return r
                r += c
            s += 1
    while txt[i] != " ":
        i += 1
    return my_txt(txt, n - 1, i + 1)

my_txt("hello to you all", 3) # returns 'you'

我自己造成的规则:没有切片,理解,生成器或内置函数调用。

在尝试获取最后一个单词(除非有尾随空格)或单词范围内的任何n时,此代码将会非常失败。

答案 4 :(得分:0)

显然,这并非没有“内置函数”,但无论您如何努力,它都不会出错:)

def my_text(string, integer=None):
  try:
    integer = int(integer)
  except ValueError:
    return 'enter a number'
  else:
    try:
      return string.split()[integer - 1]
    except IndexError:
      string = string.split()
      return f"text contains only {len(string)} word"

def inp():
  try:
    return int(input('Which word you need? ex: 1,2,3 etc.: '))
  except ValueError:
    return 'Enter number please'

print(my_text(input('Enter text here:  '), inp()))