如何在文本中找到第n个单词。
示例:
my_txt("hello to you all" , 3)
all
我不想使用任何内置功能......这不是作业:D
答案 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()))