2017-10-18 2 views
0

mit Ich versuche, Code zu schreiben, einen Dateinamen in der Befehlszeile und Ausdruck der folgenden Eigenschaften annehmen:Python Argumente vom Typ ‚int‘ Iterable nicht, wenn in

  • Anzahl der Zeilen
  • Anzahl der Zeichen
  • Anzahl der Wörter
  • Anzahl „der“
  • Anzahl von „a/ein“

Ich erhalte die Fehlermeldung

if 'the' in words:

für die Linie "Argument vom Typ 'int' nicht iterable ist".

Wie behebe ich das?

import sys 
import string 

file_name=sys.argv[0] 

char= words = lines = theCount = aCount= 0 

with open(file_name,'r') as in_file: 
    for line in in_file: 
     lines +=1 
     words +=len(line.split()) 
     char +=len(line) 
     if 'the' in words: 
      theCount +=1 
     if 'a' in words: 
      a +=1 
     if 'an' in words: 
      a +=1 

print("Filename:", file_name) 
print("Number of lines:", lines) 
print("Number of characters:", char) 
print("Number of 'the'", theCount) 
print("Number of a/an:", aCount) 
+0

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. –

Antwort

0

Wenn Sie versuchen, die tatsächlichen Worte, und nicht nur die Zahl, sie zu sammeln, dann vielleicht müssen Sie Wörter auf eine leere Liste initialisieren:

words = [] 

und

words += len(line.split()) 
ändern

zu

words += line.split() 
0

gibt es einige Fehler im Code, lesen Sie die Kommentare in diesem snipped:

import sys 
#import string #not sure if this is needed 

file_name=sys.argv[0] 

char= words = lines = theCount = aCount= 0 


with open(file_name,'r') as in_file: 
    for line in in_file: 
     lines +=1 
     x = line.split() #use a variable to hold the split words 
         #so that you can search in it 
     words +=len(x) 
     char +=len(line) 
     if 'the' in x: #your original code was using "words" variable 
         #that holds the "number of words" in the line, 
         #therefore ints are not iterable 
      theCount +=1 
     if 'a' in x: 
      aCount +=1 #your original code using "a" variable 
         #which did not initialized, 
         #you have initialized "aCount" variable 
     if 'an' in x: 
      aCount +=1 #same as above 

print("Filename:", file_name) 
print("Number of lines:", lines) 
print("Number of characters:", char) 
print("Number of 'the'", theCount) 
print("Number of a/an:", aCount) 

https://repl.it/Mnwz/0

0

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) 
Verwandte Themen