Forum huvudsida -> Programmering -> Python Hjälp!!
Sidor: 1
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örvirrande |
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!!
Du får inte posta i den här tråden | Till toppen
Datum
2024-05-05 07:21
Vecka: 18
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.