Forumet - hjälp retarderad japan programmera (i python)

hjälp retarderad japan programmera (i python)

1708 0 35
är sorgligt inkompetent när det kommer till programmering.

försöker göra en typ av rättstavningsprogram (skulle man kunna kalla det). det är en skoluppgift.

iaf, det jag ska göra i just den sekvensen jag postar är att läsa in en text från en fil, splitta upp alla ord och lägga dem i en lista.

det jag skrivit än sålänge är ungefär:

# -*- coding: utf-8 -*-
def lasinfrantext(self, textfil): #läser in filen med text

textfil = open(str(textfil.txt) , 'r')
text = []

for ord1 in textfil.readlines():
ord1 = ord1.strip('
')
ord1 = ord1.split(' ')

jag tror mig ha lyckats göra så att orden splitats upp men... hur fan lägger jag dem i listjäveln?

Spana också in:

Blivande_japan:

lägger jag bara till det i slutet av koden, el hur gör jag..?


Läs om listors inbyggda metoder så ser du att append(arg) lägger till arg till slutet av listan. Eftersom du vill lägga till varje ord så måste du ju göra det när du itererar över filen. Alltså:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
def lasinfrantext(self, textfil): #läser in filen med text

textfil = open(str(textfil.txt) , 'r')
text = []

for ord in textfil.readlines():
ord = ord.strip('
')
ord = ord.split(' ')
text.append(ord)
har en if-sats som ser ut såhär:

if text == 'an' and ((nasta_ord[0] in konsonanter) and (nasta_ord not in undantag_anli)):
text = '*' + text + '*'

och en motsvarande för 'a' DOCK får jag en sådan här utskrift:

"I'm", 'sending', 'you', 'an', 'unit.', '', 'This', 'is', '*a*', 'apple.', '', "I'm", 'sending', 'you', 'a', 'sos.', '', 'This', 'is', '*an*', 'message.', 'You', 'are', 'a', 'horse.', 'You', 'can', 'eat', '*a*', 'apple.'

med andra ord klarar den ej av att hitta/markera undantagen, utan bara de ord som följer "regeln"

kan någon spontant se vad jag gjort för fel?
Skriv din kod inom [ pre ] taggar, så att indentering bibehålls.

Jag ska se om jag förstått saken korrekt. Du har två listor; konsonanter som innehåller alla konsonanter (antar jag), och en till lista med ord som undantas från en regel.
text och nasta_ord antar jag är strängar.

Du vill att din if-sats ska returnera sant om text är 'an', första bokstaven i nasta_ord är en konsonant, och nasta_ord är inte i listan med undantag.

if text == 'an' and nasta_ord[0] in konsonanter and nasta_ord not in undantag_anli:
text = '*' + text '*'
Åtta:

Jag ska se om jag förstått saken korrekt. Du har två listor; konsonanter som innehåller alla konsonanter (antar jag), och en till lista med ord som undantas från en regel. text och nasta_ord antar jag är strängar.


ah, förklarade ej så bra[blush] el, text är väl en lista typ och nästa ord är väl ett objekt i listan...? tror jag, som sagt är jag mkt dålig på programmering

Åtta:

Du vill att din if-sats ska returnera sant om text är 'an', första bokstaven i nasta_ord är en konsonant, och nasta_ord är inte i listan med undantag.


yes, om så är fallet ska ordet markeras med "*" på varje sida

som i

""I'm", 'sending', 'you', 'an', 'unit.', '', 'This', 'is', '*a*', 'apple.', '', "I'm", 'sending', 'you', 'a', 'sos.', '', 'This', 'is', '*an*', 'message.', 'You', 'are', 'a', 'horse.', 'You', 'can', 'eat', '*a*', 'apple.'"

med undantag att "an" innan unit och "a" innan sos ska markeras
Blivande_japan:

ah, förklarade ej så bra el, text är väl en lista typ och nästa ord är väl ett objekt i listan...?


Posta hela den relevanta kodbiten istället, så blir det enklare att förstå. Utifrån vad du sagt nu så antar jag att din kod bör se ut ungefär såhär:

text = ["I'm", "sending", "you", "an", "unit", "This", "is", "a", "apple"]
exceptions = ["university", "hour"]
vowels = ("a", "e", "i", "o", "u", "y")

next = None

for index, word in enumerate(text):
# Kolla så att du inte försöker ta ett ord som inte finns
try:
next = text[index+1]
except:
break

if word == "an" and next[0] in vowels and next not in exceptions:
text[index] = '*' + word '*'
Blivande_japan:

har provat .upper el vad det var, men stod att det ej fungerade på lisotor.


Det är för att det är en strängmetod. lista.upper() fungerar inte, men lista.upper() fungerar (om innehållet i lista är en sträng).

Du behöver inte göra en till lista, utan i din if-sats så gör du istället t.ex. såhär:

vowels = ["a", "e", "i"]
words = "apple", "pie", "university", "Indian"

for word in words:
if word[0].lower() in vowels:
print(word + " begins with a vowel.")


Blivande_japan:

om jag har en lista som jag sedan skriver in i en fil, hur blir jag av med ", mellan alla ord?


Du gör det onödigt krångligt för dig själv. Istället för att skriva in listan i formen ["ord", "korv", "stol"] så kan du skriva ett ord på varje rad, såhär:
file = open("utmatning.txt", "w")

for word in list:
file.write(word + "
")

file.close()


Då kommer utmatning.txt att innehålla alla dina ord, separerade av en radbrytning.

När du sedan ska läsa in det behöver du bara göra:
file = open("utmatning.txt", "r")
list = []
for word in file:
word = word.rstrip() // rstrip tar bort whitespace och newlines
list.append(word)


Din stavningskontroll-funktion ser konstig ut. Du behöver ingen lista med konsonanter. Kom ihåg att alla bokstäver som inte är vokaler är konstanter. Har du då en lista med vokaler så behöver du ju bara kolla om bokstaven finns i vokallistan. Gör den inte det så är det en konsonant.
Åtta:

Din stavningskontroll-funktion ser konstig ut. Du behöver ingen lista med konsonanter. Kom ihåg att alla bokstäver som inte är vokaler är konstanter. Har du då en lista med vokaler så behöver du ju bara kolla om bokstaven finns i vokallistan. Gör den inte det så är det en konsonant.


jag måste ju kolla undantag osv också, och undantagen måste läsas in från en fil

Åtta:

Då kommer utmatning.txt att innehålla alla dina ord, separerade av en radbrytning.


men jag ska liksom ha en hel, flytande text, inte en massa rader med ett ord på varje
Blivande_japan:

är jag blind eller är det exakt samma sak..?


Oj, det var UM som parsade ut [ i ]. Egentligen menade jag lista[ i ].upper(), men utan mellanslagen.

Blivande_japan:

men jag ska liksom ha en hel, flytande text, inte en massa rader med ett ord på varje


Separera dem med ett mellanslag istället då. Byt ut file.write(word + "
") mot file.write(word + " ").

Blivande_japan:

jag måste ju kolla undantag osv också, och undantagen måste läsas in från en fil


def spellcheck(text):
next = None

for index, word in enumerate(text):
# Kolla så att du inte försöker ta ett ord som inte finns
try:
next = text[index+1]
except:
break

if word == "a":
# Om nästa ord börjar på vokal och det inte är ett undantag
if next[0] in vowels and next not in exceptions_a:
text[index] = '*' + word + '*'
elif word == "an:
# Om nästa ord börjar med konsonant och inte är ett undantag
if next[0] not in vowels and next not in exceptions_an:
text[index] = '*' + word + '*'

return text

def save_results(text, filename):
'''Sparar en lista i <filename>. Orden separeras med mellanslag.'''
file = open(filename, "w")

for word in text:
file.write(word + " ")

file.close()

def parse_file(filename):
'''Öppnar <filename> och gör en lista av alla ord.'''

file = open(filename, "r")
list = []

for word in file:
word = word.rstrip()
list.append(word)

return list
Åtta:

Jobbigt med matte och fysik (samt att behöva plugga i 5 år till). [sad] Vet inte vad jag vill byta till. Vet bara att jag inte vill fortsätta med det jag gör.


högskoleingenjör då? då kan du ju börja jobba efter 3, och om du kommer på att du vill bli civilingenjör sen är det ju bara att slänga på två år till

- - - - - - - - - - - - - - - - - Sammanslagning 1 - - - - - - - - - - - - - - - - -


plus att de är slappare, läser inte lika mkt matte och sånt