2016-04-19 10 views
0

pythonスクリプトを作成して、各文字がテキストファイルから出現する回数を数えます。だから、テキストファイルはHi thereが含まれている場合、出力はテキストファイルに文字が表示される回数を数えます。

E is shown 2 times 
H is shown 2 times 
I is shown 1 time 
R is shown 1 time 
T is shown 1 time 

ようなものになるだろう、私はこれを取得するさまざまな方法を試してみたが、私は構文エラーを得ることに運ぶように私には何も出力が示されていないされています。私はあなたがパラメータ名として、EXAMPLE.SQLていないことができ、あなたの関数には、次の

import collections 
import string 

def count_letters(example.txt, case_sensitive=False): 
    with open(example.txt, 'r') as f: 
     original_text = f.read() 
    if case_sensitive: 
     alphabet = string.ascii_letters 
     text = original_text 
    else: 
     alphabet = string.ascii_lowercase 
     text = original_text.lower() 
    alphabet_set = set(alphabet) 
     counts = collections.Counter(c for c in text if c in alphabet_set) 

    for letter in alphabet: 

     print(letter, counts[letter]) 
    print("total:", sum(counts.values())) 

    return counts 

そして

def count_letters(example.txt, case_sensitive=False): 
    alphabet = "abcdefghijlkmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ" 
    with open(example.txt, 'r') as f: 
     text = f.read() 
    if not case_sensitive: 
     alpahbet = alphabet[:26] 
     text = text.lower() 
     letter_count = {ltr: 0 for ltr in alphabet} 
    for char in text: 
     if char in alphabet: 
      letter_count[char] += 1 
    for key in sorted(letter_count): 
     print(key, letter_count[key]) 
    print("total", sum(letter_count())) 
+0

**カウント**の割り当てに字下げの問題があると思います。 – vmonteco

+0

@vmontecoどのスクリプトですか? – smitthy

+0

表示される構文エラーは何ですか? –

答えて

1

スクリプトの実行中にいくつか問題が発生しました。 @Priyansh Goelによって答えが正しく見つかりました。example.txtをパラメータとして使用することはできません。 text_fileのような変数名を選択するだけで、関数を呼び出すときにファイル名の文字列を渡すだけです。

また、インデントエラーまたは2つがありました。ここで私が動作するようになったスクリプトは次のとおりです。

import collections 
import string 

def count_letters(text_file, case_sensitive=False): 
    with open(text_file, 'r') as f: 
     original_text = f.read() 
    if case_sensitive: 
     alphabet = string.ascii_letters 
     text = original_text 
    else: 
     alphabet = string.ascii_lowercase 
     text = original_text.lower() 
     alphabet_set = set(alphabet) 
     counts = collections.Counter(c for c in text if c in alphabet_set) 

    for letter in alphabet: 
     print(letter, counts[letter]) 

    print("total:", sum(counts.values())) 

    return counts 

count_letters("example.txt") 

あなただけの今までちょうど関数に最初のパラメータを取り除くと、ハードコードにファイル名を取得し、"example.txt"でこれを使用する場合:

def count_letters(case_sensitive=False): 
    with open("example.txt", 'r') as f: 
     ... 

count_letters() 

ワンプログラマがスローされるエラーを読んで理解することを学ぶときに開発できる最高のスキルがあります。彼らは怖い、またはイライラすることを意図していませんが(時には彼らもそうですが)、彼らは役に立つと考えられています。あなたが持っていたような構文エラーは特に役に立ちます。エラーが何を示しているか完全に明白でない場合は、エラーをコピーしてGoogle検索に貼り付けてください。あなたの質問への回答がすでに存在していることがよくあります。

学習に幸運を祈る! Pythonはあなたの(おそらく)第一言語のための素晴らしい選択でした!

+0

'example.txt'は' Hi there'を含んでいるファイルです – smitthy

+0

ファイルに何が含まれているかは関係ありませんが、 'example.txt'をパラメータとして使用しようとしているということは間違っています。そのテキストファイルを使用するだけで、別のテキストファイルで関数を実行したくない場合は、関数のパラメータから除外し、文字列 '" example.txt "'を参照してください'with open ...'ブロック。他のテキストファイルから読み込むことができるようにするには、パラメータ名を 'text_file'(またはそれを呼びたいもの)に変更し、その関数を呼び出すときに文字列を必ず含めてください。 – bobbyz

+0

テキストファイル内の文字のみを表示するように、どうすれば変更できますか? – smitthy

-1

を試してみました。

次のコードは、アルファベット全体ではなく、テキストの文字をたどるだけです。私は文字の頻度を格納するために辞書を使用しています。 isalphaは辞書にアルファベットを入れるために使用されます。

import collections 
import string 

def count_letters(textfile, case_sensitive=False): 
    with open(textfile, 'r') as f: 
     original_text = f.read() 
     if case_sensitive: 

      text = original_text 
     else: 

      text = original_text.lower() 

     p = dict() 

     for i in text: 
      if i in p.keys(): 
       p[i] += 1 
      elif i.isalpha(): 
       p[i] = 1; 

     keys = p.keys() 

     for k in keys: 
      print str(k) + " " + str(p[k]) 


count_letters("example.txt") 
+0

example.txtは' Hi there'を含むファイル名です – smitthy

+0

はいそれをパラメータとして渡すことはできません。あなたができることは、ファイルの名前をStringとして渡すことです。そしてそれを関数内で使用します。 –

+0

私は上の答えに示されている例を使用していますが、それは動作しますが、テキストファイル内の文字だけを – smitthy

関連する問題