Vinnaren i pepparkakshustävlingen!
2015-10-22, 12:35
  #1
Medlem
Jag har denna uppgift vet hur man ska börja och har skrivit längre ner men sedan fastnar jag i mitten!


I den ha ̈r uppgiften ska du o ̈ppna en textfil och ra ̈kna hur ma ̊nga av raderna som har minst ett visst antal ord samt hur ma ̊nga rader som har minst ett ord. Antalet ord som ska ja ̈mfo ̈ras med, och filnamnet ska la ̈sas in via tangentbordet. Antalet ord att ja ̈mfo ̈ra med ska ocksa ̊ konverteras till ett heltal. Resultatet ska skrivas ut som i exemplet nedan.

Nedan finns ett exempel pa ̊ en textfil med en dikt av Edith So ̈dergran (4 April 1892 – 24 June 1923).
Skogssj ̈o
Jag var allena p ̊a solig strand vid skogens blekbl ̊a sj ̈o,
p ̊a himlen fl ̈ot ett enda moln och p ̊a vattnet en enda ̈o.
Den mogna sommarens s ̈otma dr ̈op i p ̈arlor fr ̊an varje tr ̈ad
och i mitt ̈oppnade hj ̈arta rann en liten droppe ned.

Om vi antar att filen ovan heter lake.txt ska resultatet bli enligt exemplet nedan. Filename: lake.txt

Number of words: 6
4 lines out of 9 have at least 6 words

Algoritmen fo ̈r programmet blir fo ̈ljande

begin
FILENAME ← value from keyboard
WMIN ← value from keyboard konverted to an integer open file FILENAME
numlines ← 0
numwmin ← 0
for each lineinfile do
wordlist ← line split into words as a list
if wordlist has more than1 items then
numlines ← numlines + 1
end
if wordlist has more than WMIN items then
numwmin ← numwmin + 1
end done
close file
print result in the form ”numwmin lines out of numlines has at least WMIN words”
end

Programmet beho ̈ver inte go ̈ra na ̊gra felkontroller. Redovisa ditt program va ̈lkommenterat och indenterat pa ̊ ett separat papper och bifoga tentamen.

Det jag har kommit fram:

filename = raw_input ('filename: ')
Wmin = int (raw_input ('wmin: '))
f = open (filename, 'r')
numlines = 0
numwmin = 0
for line in f.readlines ():
words = line. split () ---> Här är jag osäker oxå. men sedan fastnar jag och vet inte hur jag ska fortsätta någon som skulle kunna hjälpa mig!?

TACK
Citera
2015-10-22, 13:00
  #2
Medlem
vim.s avatar
Du kan göra såhär.

Kod:
filename = input("Enter filename: ")
num_words = int(input("Enter number of words: "))


f = open(filename, "r")
lines = 0 # number of lines

for line in f:
	line = line.split(" ")
	if len(line) >= num_words:
		lines+=1
print(str(lines)+" lines have at least "+str(num_words)+" words")
f.close()
__________________
Senast redigerad av vim. 2015-10-22 kl. 13:04.
Citera
2015-10-22, 19:56
  #3
Medlem
Citat:
Ursprungligen postat av vim.
Du kan göra såhär.

Kod:
filename = input("Enter filename: ")
num_words = int(input("Enter number of words: "))


f = open(filename, "r")
lines = 0 # number of lines

for line in f:
	line = line.split(" ")
	if len(line) >= num_words:
		lines+=1
print(str(lines)+" lines have at least "+str(num_words)+" words")
f.close()

Tack men kan du inte vägleda mig från den väg jag har skrivit så att det bli lite enklare!
Citera
2015-10-22, 20:52
  #4
Medlem
vim.s avatar
Citat:
Ursprungligen postat av mina93
Tack men kan du inte vägleda mig från den väg jag har skrivit så att det bli lite enklare!

Det du har kommit fram till verkar ju ganska likt det jag har gjort. Ändra for-loopen bara och splitta bort mellanrummen. Splitten ger ju en lista och antalet element i listan är ju då antalet ord per rad.

Kod:
>>> ex = "This is a test"
>>> ex = ex.split(" ")
>>> ex
['This', 'is', 'a', 'test']
>>> len(ex)
4
>>> 
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback