Aviseringar
Rensa alla

hjälp retarderad japan programmera (i python)


Ämnesstartare

ä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?


   
Citera

text = ord1;
i++;
kanske? ALdrig använt phyton.


   
SvaraCitera
Ämnesstartare

ankzor:

text = ord1;i++; kanske? ALdrig använt phyton.

tror ej, fick det inte att funka iaf[sad]


   
SvaraCitera
Åtta

Blivande_japan:

hur fan lägger jag dem i listjäveln?

text.append(ord1)

   
SvaraCitera
Ämnesstartare

Åtta:

text.append(ord1)

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


   
SvaraCitera
Åtta

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)

   
SvaraCitera
Ämnesstartare

Åtta:

Alltså:

okej, tack![crazy]


   
SvaraCitera

Blivande_japan:

tror ej,

trodde ej heller, trodde det var något liknande. Dcok var det ej heller det då det tydligen var något stack liknande.


   
SvaraCitera
Ämnesstartare

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?


   
SvaraCitera
Åtta

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 '*'

   
SvaraCitera
Ämnesstartare

Å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


   
SvaraCitera
Åtta

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 '*'

   
SvaraCitera
Åtta

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.


   
SvaraCitera
Ämnesstartare

Åtta:

lista.upper() fungerar inte

Åtta:

men lista.upper()

är jag blind eller är det exakt samma sak..?[shake]


   
SvaraCitera
Ämnesstartare

Å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


   
SvaraCitera