Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  15 2188
Hei
jeg skal finne ut antall forekomster av et ord i en tekstfil, men den printer ut feil svar. Er det noen som kan se årsaken? riktig svar er 6, men den printer ut 0

f = open ("/Users/Lise/Desktop/gutenberg.txt", 'r')
counts =f.read()
print counts
print "antall forekomster av strengen of:"
teller = 0
for line in f:
if "for" in line:
teller += 1


f.close()

print teller
Du tar ikke hensyn til om for kommer fler ganger i sammelinje. Ville og brukt f.readlines() i stede for f.read() i dette tilfelle.
Trådstarter
7 0
aha! er veldig ny på dette..hvordan tar jeg hensyn til det ?
Jeg kan ikke python, men om jeg forsto etse rett ville han brukt f.readlines() istedenfor f.read, deretter loopet alle linjene og telt forekomstene av ordet.
Ja. Bruk readlines i stede for read. Den lager en liste med alle linjene. Da kan du gjøre slik du gjør. Akkurat nå prøver du egentlig bare å telle hvor mange linjer som har et bestemt ord. Skal du telle hvor mange ord må du ha en ekstra indre løkke.
Akkurat nå looper du igjennom hvert tegn i hele filen. Putter du "print line" inne i loopen din, så vil du lett se det.

Bytter du ut read() med readlines() vil variabelen counts bli en liste med linjer istedenfor hele teksten. Da vil for-loopen din gå igjennom hver linje i teksten din og sjekke om den inneholder 'for'. Da får du hvor mange linjer som inneholder 'for' i teksten, som fortsatt ikke er det du vil.

Om du skal finne hvor mange 'for' det er i teksten er det derimot mye enklere å bruke string-metoder:

Kode

f = open ("/Users/Lise/Desktop/gutenberg.txt", 'r')
tekst =f.read()
antall = tekst.count("for")
print antall
Sist endret av DumDiDum; 26. januar 2014 kl. 14:18.
Det egentlige problemet her er at du med linjen counts =f.read() leser ut hele filen, slik at når du begynner for-løkka er det ingenting igjen å lese. Fjerner du den overnevnte linja vil du finne at koden din fungerer som tiltenkt.
Trådstarter
7 0
selv om jeg bytter til readline() så gir den ikke rett svar nei :/ prøvde også å fjerne counts =f.readlines() men gir fortsatt svaret 0.
Trådstarter
7 0
Sitat av DumDiDum Vis innlegg
Akkurat nå looper du igjennom hvert tegn i hele filen. Putter du "print line" inne i loopen din, så vil du lett se det.

Bytter du ut read() med readlines() vil variabelen counts bli en liste med linjer istedenfor hele teksten. Da vil for-loopen din gå igjennom hver linje i teksten din og sjekke om den inneholder 'for'. Da får du hvor mange linjer som inneholder 'for' i teksten, som fortsatt ikke er det du vil.

Om du skal finne hvor mange 'for' det er i teksten er det derimot mye enklere å bruke string-metoder:

Kode

f = open ("/Users/Lise/Desktop/gutenberg.txt", 'r')
tekst =f.read()
antall = tekst.count("for")
print antall
Vis hele sitatet...


jeg prøvde ut den der, men ga fortsatt svaret 0 :/

Kode

tsg ~ $ cat test.for.txt 
for for for
tsg ~ $ python
Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> with open('test.for.txt') as f:
...     print f.read().count('for')
... 
3
Enkelt og greit
Sist endret av liasis; 26. januar 2014 kl. 15:12.
Sitat av prognet Vis innlegg
jeg prøvde ut den der, men ga fortsatt svaret 0 :/
Vis hele sitatet...
Koden er riktig.

Kode

>>> f = open ("d:\\gutenberg.txt", 'r')
>>> tekst = f.read()
>>> tekst.count("fisk")
2
Neste skrittet da er å lære seg å programmere. Det handler i stor grad om å klare å finne ut av hva som faktisk skjer. Kjør koden linje for linje og finn ut hva som går galt. Blir fila lest? Er det riktig fil du leser? Inneholder den faktisk strengen du leter etter?

Lykke til.
Trådstarter
7 0
takk! jeg fikk det til

har et nytt spørsmål! hvordan fjerner jeg de to siste bokstavene i hvert ord i en tekst? jeg får bare til å fjerne de to siste bokstavene i det siste ordet i teksten.

dette er koden min så langt:

liste = ["tekst"]
for ord in liste:
print ord
print ord.split()
print ord[:-2]
liste = ["tekst"]
for ord in liste:
print(ord[0,len(ord)-2])

Sjekk det du, har ikke python her, men tror det er slik
Sitat av prognet Vis innlegg
takk! jeg fikk det til

har et nytt spørsmål! hvordan fjerner jeg de to siste bokstavene i hvert ord i en tekst? jeg får bare til å fjerne de to siste bokstavene i det siste ordet i teksten.

dette er koden min så langt:

liste = ["tekst"]
for ord in liste:
print ord
print ord.split()
print ord[:-2]
Vis hele sitatet...
1. listen du har oppgitt har bare ett ord
2. du trenger ikke bruke split(), når listen allerede har splittet opp teksten i ett ord pr element.


Eksempel vist i et interaktivt skall:

Kode

$ python
Python 2.7.5 (default, Aug 25 2013, 00:04:04) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> words = ['learning', 'to', 'read', 'documentation', 'is', 'essential']
>>> for word in words:
...     print word[:-2]
... 
learni

re
documentati

essenti
>>>
Sist endret av liasis; 27. januar 2014 kl. 23:31.
Sitat av Klokkemaster Vis innlegg
print(ord[0,len(ord)-2])
Vis hele sitatet...
Dette er nok en helt ok måte å gjøre det på i andre programmeringsspråk, men den foretrukne måten å gjøre det i python er å bruke string[0:-2]. Det er langt mer lesbart, sparer deg for et kall til len(), og syntaxen er lik den du vil bruke for å dele opp en liste
Trådstarter
7 0
oii da jeg skrev listen, så mente jeg at det skulle være flere ord inni den, en lang tekst, bare tok den ikke med