如何在文本中找到第n个单词。
示例:
示例:
my_txt("hello to you all" , 3)
all
我不想使用任何内置函数......这不是一项作业 :D
显而易见的方法是:
"hello to you all".split()[3]
80年代的做法是——也就是说,你必须遍历文本,并记录你发现过的状态——可能会有更好的方法,但这就是思路。不管哪种方法,都需要使用很多“内置”函数。我只是避免像上面那样直截了当地处理文本。
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")
my_txt(' foo', 0)
会产生一个长度为零的字符串。my_text(' foo', 1)
会产生 'foo'
。看起来 last_was_space
应该被初始化为 True
。 - John Machinstr.split
的真正 C 实现 :-) - John Machin既然所有的东西在某种意义上都是内置函数,那我就忽略你不想使用内置函数的声明。
def my_txt(text, n):
return text.split()[n]
好的,你需要一个“拆分单词”的功能。下面是代码。该代码假设单词由空格分隔。
没有内置函数,也没有导入任何内容,不使用内置类型的方法,甚至没有像 +=
这样的娘娘腔东西。并且已经测试过了。
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']
>>>
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
时,此代码将失败得非常可怕。
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()))
str.split()
函数。 - Rafe Kettler