Forum: Python Hjälp!!

Forum huvudsida -> Programmering -> Python Hjälp!!

Sidor: 1

Till botten

python87 06:53 - 24:e April 2007 | Post #1
Medlem
Inlägg: 3


Skicka PM
HEJ!!

Jag ska skriva ett program som läser in filer, skriver ut texten på skärmen och varnar
användaren för att ett ord har upprepats inom ett intervall på ca 40 ord.

Den första delen är avklarad, men jag har inte lyckats skriva funktionen som ska markera de upprepade orden.

Exempel:
Skor är ett slags fotbeklädnad av kraftigt material vars övre del täcker hela eller delar av *foten*, men högst når till vristen

[I][/I]

Här är koden

-------------

the_file=raw_input("Skriv in textfilens namn:")


#kontrollerar om filen existerar


try:
filen = open(the_file, "r")
except(IOError):
print "Kan inte öppna filen", the_file
print "n" "Avslutar programmet.n"
raw_input("nnTryck retur för att stänga.")
sys.exit()
else:
print "n"
print "filen", the_file, "existerade"


print "n"

filen=open(the_file, "r")
for line in filen.readlines():
print line
filen.close()

-----------

filen=open(the_file, "r")
rader= filen.read()

ordlista = rader.split(" ")

ord_i_lista = "ordlista[0]"
nytt_ord = "*ordlista[0]*"
listan.replace(ord_i_lista, nytt_ord)

def repeterande(

---------------

längre har jag inte kommit. Mitt mål är att skriva en funktion som returnerar en ny lista med de upprepade orden *markerade*.

Finns det någon som kan hjälpa mig??

Tack på förhand




Senast redigerad 08:15 - 24:e April 2007


Independence 10:00 - 24:e April 2007 | Post #2
Administratör
Inlägg: 1800


Skicka PM
En lösning som jag kan tänka mig är att du skapar en lista med ett element per ord, t ex med "en sträng".split()
Sedan har du en for-loop som loopar igenom alla orden i listan, och i den loopen ytterligare en loop som tittar de 40 närmaste orden och jämför dem med det nuvarande.

-------------------------

Vi är riddarna som säger fiskbulle!





tobbez 13:27 - 24:e April 2007 | Post #3
Medlem
Inlägg: 364


Skicka PM
Inte för att jag kan mycket python, men angående "problemet" som ska lösas:
Jag tyckte det enklaste skulle vara att göra en array/lista av en enkel datatyp som innehåller en sträng (ett ord), samt ett heltal (positionen). I själva programmet kan nog enklast illustreras mha lite pseudo-kod:

counter = 0
while (file.not_eof)
{
temp = read_word(file)
if (lista.exist(temp))
{
if (counter - lista.indexof(temp).last_pos < 20) print "ordet " + temp + " upprepades på position " + counter
lista.indexof(temp).last_pos = counter
}
else lista.add(temp,counter)
foreach (element tmp in lista) i
counter++
}

Inte särskilt fin, bra eller optimerad kod, men det lär framgå ungefär hur jag menar. Nu vet jag som sagt inte vad python har för olika datatyper, men något liknande php:s arrayer vore trevligt att spara orden i:
$orden['hej'] = 1
där hej är det aktuella ordet, och 1 är den position man senast såg det på.

Får hoppas det inte blev allt för förvirrandeSmiley




python87 12:55 - 26:e April 2007 | Post #4
Medlem
Inlägg: 3


Skicka PM
filen=open(the_file, "r")
rader= filen.read()

ordlista = rader.split(" ")

for i in range(0,len(ordlista)):
if ordlista[i] in ordlista[i+1:i+40]:
ordlista[i]="*"+ordlista[i]+"*"

print ordlista


Kan ni se vart felet ligger? när programmet körs öppnas texten upp som en lista, och alla å, ä och ö:n ändras till andra tecken. Vidare är det inte de repeterande orden som markeras, utan den första som förekommer =/





Independence 13:38 - 26:e April 2007 | Post #5
Administratör
Inlägg: 1800


Skicka PM
Tja, du har ju ingen kod som försöker markera de repeterande orden, så det förvårar mig inte direkt att de inte markeras.
Om du använder min approach behöver du som sagt en till loop inuti den första som går igenom de följande 40 orden och markerar de som är samma.

-------------------------

Vi är riddarna som säger fiskbulle!





python87 14:00 - 26:e April 2007 | Post #6
Medlem
Inlägg: 3


Skicka PM
menar du på detta vis?

for i in range(0,len(ordlista)):
for i in range(0,41):
if ordlista[i] in ordlista[i+1:i+40]:
ordlista[i]="*"+ordlista[i]+"*"






Independence 14:37 - 26:e April 2007 | Post #7
Administratör
Inlägg: 1800


Skicka PM
Något i den stilen ja. Du kan dock inte ha samma variabelnamn i båda looparna t ex. Och sedan är ju jämförelsen i if-satsen till ditt förra program, och måste bytas ut.

-------------------------

Vi är riddarna som säger fiskbulle!





Sidor: 1

Forum huvudsida -> Programmering -> Python Hjälp!!
Atom feed

Du får inte posta i den här tråden | Till toppen