2010-10-10 5 views
0

mon devoir était de: "écrire une fonction appelée findPattern() qui accepte deux chaînes comme paramètres, un nom de fichier et un pattern.La fonction lit dans le fichier spécifié par le nom de fichier donné et recherche le contenu du fichier. Il renvoie ensuite le numéro de ligne et l'index de la ligne où se trouve la première instance de ce modèle.Si aucune correspondance n'est trouvée, votre fonction doit renvoyer -1 pour le numéro de ligne et l'index. "findPattern() Python Code ... ne s'exécute pas correctement?

J'étais assez certain que mon code était précis jusqu'à ce qu'il exécute les premières commandes, puis ignore le reste du code. J'ai essayé plusieurs façons de l'écrire, mais tous les trois ont donné le résultat de ... ne pas fonctionner.

Je posterai les deux codes pertinents ci-dessous:

Code 1:

def findPattern (filename, pattern): 
    f=open(filename) 

    linecount = 0 
    lettercount = 0 


    for line in f: 
     lineCount +=1 
     for letter in range(len(line)): 
      if line(letter)==pattern: 
       letterCount+=1 
       return[lineCount,line] 
    return "Did not find " + pattern 

Code 2:

print 
filename = raw_input("Enter a file name: ") 
pattern = raw_input("Enter a pattern: ") 

def findPattern (filename,pattern): 
    f=open(filename) 

    lineCount = 0 
    letterCount = 0 

    for line in f: 
     lineCount +=1 
     for letter in range(len(line)): 
      if line(letter)==pattern: 
       letterCount+=1 
       print ("Found pattern " + pattern + " at " + str((lineCount, letter))) 

Je pense que le code 2 serait plus susceptible de travailler, mais il ne donne aucun résultat. Toute contribution serait appréciée.

-Merci!

Répondre

1

Vos noms de variables sont mal orthographiés: linecount par rapport à lineCount, lettern par rapport à letter. Python ne met pas toujours en garde contre ce type d'erreur. Si c'est juste une erreur de copie, alors line(letter) est l'erreur: un index est donné par []. Quel type de motif recherchez-vous, un seul caractère ou une chaîne? line[letter] ne retournera qu'un seul caractère.

La prochaine fois, s'il vous plaît poster non seulement le code et que donne une erreur, mais aussi quel genre d'erreur. La plupart des erreurs Python entraînent la levée d'exceptions (telles que TypeError), ce qui peut vous indiquer (et nous) beaucoup de choses sur ce qui ne va pas.

+0

Eh bien, la chose n'a pas donné quoi que ce soit, en tapant raw_inputs, il ferait juste cela: >>> Donc, merci pour la réponse rapide, je n'ai pas remarqué les fautes de frappe. – compsciencenub

+0

Aussi, je cherche une chaîne. Malheureusement, je suivais le code d'un cours de discussion, donc je n'étais pas très sûr de quoi. – compsciencenub

+1

Est-ce que ce sont les scripts complets? Alors la solution est assez simple: vous n'appelez pas la fonction 'findPattern', juste en la définissant. –

0

Vous appelez line en tant que fonction mais c'est une chaîne. Utilisez pattern.find(line) sur chaque ligne pour trouver votre modèle.

Questions connexes