テキストのn番目の単語を検索する方法はありますか。テキストのn番目の単語
例:
my_txt("hello to you all" , 3)
all
私はしたいが、機能に建ていずれかを使用していない...と、これは宿題ではありません:D
テキストのn番目の単語を検索する方法はありますか。テキストのn番目の単語
例:
my_txt("hello to you all" , 3)
all
私はしたいが、機能に建ていずれかを使用していない...と、これは宿題ではありません:D
あなたはこれを求めました。単語に分割する機能が必要です。ここにあります。 「単語」は空白で区切られていると仮定します。
組み込み関数はありません。インポートされたanythingsはありません。組み込み型のメソッドはありません。+=
のようなパンティーウエストのものでもありません。それはテストされています。
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']
>>>
すべては、1つの方法で機能で構築されので、私は、組み込みの関数を使いたくないという主張を無視するつもりです。
def my_txt(text, n):
return text.split()[n]
主な欠点は、句読点が含まれていることです。私はそれを取り除く方法を理解するための練習としてそれを残す。 :)それを行うには
明白な方法がある:
"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")
enumerate、isspace、stripはすべて組み込みです。 :)これはいかに愚かな参照してください参照してください? – marcog
しかし、列挙は組み込みです。そしてisspace。そして==。そして[]。そして.... ....-) –
上記を参照してください。しかし、私を去らせるための+1 ... "おい!私の頭!" (関連するノートでは、COBOLで数値のバイナリ文字列表現を抽出する方法は?-) –
最初に、私はコメントと他の答えに絶対に同意していると言いましょう。組み込み関数を使わないのは愚かです。つまり、の機能を組み込んだわずかなコードを使用してこのコードを書き込もうとすると、興味深い課題であるが呼び出されていることがわかりました。
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
の場合、このコードは大したことに失敗します。
thx ...私はこれを使うことができます。またはlen関数 – user531225
クラーク:再帰関数呼び出しを使用するのはちょっとしたチートですね。 –
彼は関数が組み込まれていない、私は再帰がそれに違反するとは思わないと言った。心配しないで、あなたの答えはまだ良いです:) –
これは宿題でない場合は、なぜ組み込み関数を使用したくないのですか? – marcog
原因私は他の可能な方法でそれを行うことを学びたい – user531225
組み込み関数のどのレベルを使いたいですか? '見つける'?スプリット?スライス演算子? – robert