Der primäre Fehler ist, dass Sie für Strings in
ein int
suchen. Ihre Variable words
ist kein Array der Wörter aus der aktuellen Zeile, sondern die Anzahl der Wörter, die über alle Zeilen hinweg angesammelt werden. Nach der ersten Iteration ist es die Anzahl der Wörter in der ersten Zeile.
Also, wenn words = 3
mit 'the' in words
falsch ist. Sie sollten eine Liste der Wörter in der aktuellen Zeile und eine inkrementelle Anzahl aller Wörter verwalten. Rufen Sie die Liste words
und die Zählung 10.
words = line.split()
wordcount += len(words) # set to 0 before loop
Jetzt 'the' in words
funktioniert. Es gibt jetzt ein anderes Problem. Wenn mehrere Wörter in einer Zeile vorkommen, zählt nur eins. Verwenden Sie stattdessen
theCount += words.count('the')
zu zählen, wie viele the
ist dort auf einer Linie sind, für 'a'
und 'an'
das gleiche tun. Dies ist nicht Groß-und Kleinschreibung. Daher ist es am besten, die gesamte Zeile vor dem Teilen in eine niedrigere Zeile zu konvertieren.
words = line.lower().split()
Sie haben einen anderen Fehler gleich zu Beginn.
file_name = sys.argv[0]
argv[0]
ist der Name der Sache ausführen zu sein (das heißt Ihr Skript Name). Sie werden also Ihr eigenes Python-Skript analysieren, um die darin enthaltenen Wörter zu zählen. Ich glaube nicht, dass Sie das beabsichtigt haben? Wenn Sie eine Befehlszeilenargument nehmen wollte, beginnen sie aus dem Index 1.
komplette Skript:
import sys
file_name = sys.argv[1]
chars = 0
wordcount = 0
lines = 0
theCount = 0
aCount= 0
with open(file_name,'r') as in_file:
for line in in_file:
lines += 1
words = line.lower().split()
wordcount += len(words)
chars += len(line)
theCount += words.count('the')
aCount += words.count('a')
aCount += words.count('an')
print("Filename:", file_name)
print("Number of lines:", lines)
print("Number of characters:", chars)
print("Number of 'the'", theCount)
print("Number of a/an:", aCount)
See [diese] (https://docs.python.org/3/library/ collections.html # counter-objects) 'Counter' Rezept aus der offiziellen Dokumentation, das zeigt, wie man das meiste macht, was man will. –