質問は次のとおりです:
次の単語が書かれたファイルがあります:
hey how are you
I am fine and you
Yes I am fine
そして、単語数、行数、文字数を求めることが求められます。
以下は私のプログラムですが、スペースのない文字のカウント数が正しくありません。
単語数も行数も正しいです。同じループ内の間違いは何でしょうか?
fname = input("Enter the name of the file:")
infile = open(fname, 'r')
lines = 0
words = 0
characters = 0
for line in infile:
wordslist = line.split()
lines = lines + 1
words = words + len(wordslist)
characters = characters + len(line)
print(lines)
print(words)
print(characters)
出力は次のようになります。
lines=3(Correct)
words=13(correct)
characters=47
複数の回答があるサイトを見ましたが、Python の他の機能を学習していないため混乱しています。ループ内のコードをできるだけシンプルで基本的なものに修正するにはどうすればよいでしょうか?
一方、スペースなしの文字数は 35 で、スペースありの文字数は 45 です。可能であれば、スペースなしの文字数を見つけたいです。スペースありの文字数のループを誰かが知っていても問題ありません。
ベストアンサー1
行内のすべての単語の長さを合計します。
characters += sum(len(word) for word in wordslist)
プログラム全体:
with open('my_words.txt') as infile:
lines=0
words=0
characters=0
for line in infile:
wordslist=line.split()
lines=lines+1
words=words+len(wordslist)
characters += sum(len(word) for word in wordslist)
print(lines)
print(words)
print(characters)
出力:
3
13
35
これ:
(len(word) for word in wordslist)
はジェネレータ式本質的には、各単語の長さを生成する 1 行のループです。これらの長さを に直接入力しますsum
。
sum(len(word) for word in wordslist)
改良版
このバージョンでは、enumerate
読みやすさを維持しながら、コードを 2 行節約できます。
with open('my_words.txt') as infile:
words = 0
characters = 0
for lineno, line in enumerate(infile, 1):
wordslist = line.split()
words += len(wordslist)
characters += sum(len(word) for word in wordslist)
print(lineno)
print(words)
print(characters)
この行:
with open('my_words.txt') as infile:
インデントを抜けるとすぐにファイルを閉じることを約束してファイルを開きます。使用後は必ずファイルを閉じることをお勧めします。