2011-02-04 5 views
2

私の関数はファイルを開き、単語の長さを数えて出力する必要があります。例えば、ファイル内の単語の長さを数えて

多く( 'SAMPLE.TXT')の長さの

言葉1:7つの

単語:長さ3の6つの

単語:長さ2の2つの

単語長さ4の:6

私のsample.txtファイルには次のものが含まれています: これはテストファイルです。どのくらいの長さの単語がありますか? いくつの単語の長さは3ですか?我々はそれを把握する必要があります! 関数がこれを行うことはできますか?

私のコーディングこれまでのところ、

def many(fname): infile = open(fname,'r') 
text = infile.read() 
infile.close() 
L = text.split() 
L.sort 
for item in L: 
    if item == 1: 
     print('Words of length 1:', L.count(item)) 

誰もが私が間違ってやっているものを私に伝えることができます。私は何も起こらない関数を呼び出します。それは明らかに私のコーディングのためですが、ここからどこに行くのか分かりません。助けてよかったです、ありがとう。

+1

を私はこれを仮定しますか? – birryree

+0

はい、申し訳ありませんが、タグを追加するのを忘れてしまいました。 – 97834657647563

+2

'L.sort'は期待したことをしていません。ここでは、ソートメソッドへの参照を取得していますが、何もしません(ステートメントは何もしません)。 'L.sort()'にするためにカッコを追加すると、実際に関数が呼び出されます(コードにはまだ他の問題があります)。 – Cameron

答えて

1

あなたはここに

if item == 1: 

、ここ

L.count(item) 

そして、実際に何が起こるんが何を期待していますか?デバッガを使用して、変数値を見たり、単に画面に出力してください。

2

ファイル内にこの長さの単語の長さ(1,2,3,4、...文字)と出現回数のリストを取得したいとします。

だからL = text.split()までは良いアプローチでした。今度はディクショナリをPythonで見てください。これにより、上記のデータ構造を保存し、ファイル内の単語のリストを繰り返し処理できます。ただのヒント...

0

問題を段階的に分析してみましょう。

  1. はすべての単語
  2. インクリメントカウンタNあなたは長さの単語N
  3. 出力を見つけるたびに上のファイル
  4. 反復からのすべての単語を検索:

    あなたがする必要があります結果

すでに手順1​​を実行しました:

def many(fname): 
    infile = open(fname,'r') 
    text = infile.read() 
    infile.close() 
    L = text.split() 

単語をソートしようとすると(しようとしますが)、それは役に立ちません。英数字でソートするので、あなたの仕事には役に立たない。

代わりに、

lengths = dict() 

の単語の数を保持するのは、Python dictionaryを定義してみましょう@sukhbirが正しくカウンタークラスを使用するようにコメントで提案されている、と私は行くし、それを検索することをお勧めしますが、私は」この例では伝統的な辞書に固執していますので、ライブラリを調べる前に言語の基本に慣れることが重要です。

のは、ステップ2で上に行こう:リスト内の各単語に対して

for word in L: 
     length = len(word) 

、我々は変数length現在の単語の長さに割り当てます。

 if length not in lengths: 
      lengths[length] = 0 

lengthのない言葉に遭遇しなかった場合、我々はそのスロットを割り当て、我々はゼロにそれを設定します。カウンターはすでに我々の長さのためのスロットを持っている場合のは確認してみましょう。最終的には、ステップ3を実行することができます:

 lengths[length] += 1 

最後に、単語のカウンターを現在の1単位で増分しました。

lengthsには、という語長の単語番号が含まれています。

for length, counter in lengths.items(): 
     print "Words of length %d: %d" % (length, counter) 

あなたは私が(インデントを尊重!!)を書いたあなたが必要な答えを得るだろうコードをコピーして貼り付ける場合は、次のは、その内容(ステップ4)を印刷していることを確認してみましょう。

Python tutorialをお勧めします。

+0

簡単な 'split()'はサンプルテキストにある句読点を取り除かないので、答えはオフになります。 – Kimvais

+0

あなたはそうです。私は彼が他の答えを読むだろうと思う...あなたははるかにコンパクトでエレガントであり、句読点を取り除くので、彼が望むならあなたのコードを使うことができるだろう。もし彼が初心者ならば、私はそう思っているように、彼はすべての答えに数時間勉強するべきです。 :) –

4

これは宿題ですので、私はここに短いソリューションを投稿し、それが何をするかを把握するエクササイズとしてそれを残して、なぜそれが動作します:)

>>> from collections import Counter 
>>> text = open("sample.txt").read() 
>>> counts = Counter([len(word.strip('?!,.')) for word in text.split()]) 
>>> counts[3] 
7 
0

正規表現ライブラリも役に立つかもしれませんやや残虐であれば。マッチングの再のようなものかもしれない簡単な単語:

import re 
f = open("sample.txt") 
text = f.read() 
words = re.findall("\w+", text) 

言葉は、その後の言葉...のリストです:)

しかしこれは正しく「されていない」と「I」のような言葉とは一致しません\ wは英数字にのみマッチします。この宿題の精神の中で私は興味ある読者のために残しておきたいと思いますが、Python Regular Expressionのドキュメントはかなり良いものです。

辞書(発生)をテキスト内の単語の長さとその発生を格納するために使用される
occurrence = dict() 
for word in words: 
    try: 
     occurrence[len(word)] = occurrence[len(word)] + 1 
    except KeyError: 
     occurrence[len(word)] = 1 
print occurrence.items() 

そして、長さによって、これらの単語をカウントするための私のアプローチは、ようなものになるだろう。 try:とexcept:キーワードは、辞書に特定の長さの単語を格納しようと試みる最初のときに対処します。この場合、辞書は知識がないものを検索することに満足していません。 :結果としてスローされた例外をピックアップし、その長さの単語の最初のオカレンスを格納します。最後の行はあなたの辞書のすべてを印刷します。

・ホープ、このことができます:)

0

たぶんも、この:pythonの場合

>>> s 
'This is a test file. How many words are of length one? How many words are of length three? We should figure it out! Can a function do this?' 
>>> {x:[len([c for c in w ]) for w in s.split()].count(x) for x in [len([c for c in w ]) for w in s.split()] } 
{1: 2, 2: 6, 3: 5, 4: 6, 5: 4, 6: 5, 8: 1} 
関連する問題