4 svar
52 visningar
Baguesses är nöjd med hjälpen
Baguesses 95
Postad: 17 sep 16:00

Filhantering

"Ni ska i denna uppgift skriva ett program som givet namnet på en textfil (som förutsätts existera i samma katalog som ert program) läser in alla ord i denna och tar bort vanligt förekommande ord." Vi har fått en fil med vanliga ord men jag vet inte hur jag ska jämföra innehållen i de två filerna. Det känns som att man ska utnyttja det faktum att Dictionarys inte tillåter dubbletter. Jag har bara lyckats räkna antalet ord i filen men den ska som sagt kunna räkna antalet ovanliga ord samt fråga efter vilken fil som ska läsas in.

dict = {}
txt = open(r'C:\Users\adria\Downloads\Vanligaord.txt')
text = txt.read()
ord = text.split()
print('Texten innehåller ' + str(len(ord)) + ' ord')
manik 36
Postad: 18 sep 10:36 Redigerad: 18 sep 10:38

För att fråga efter fil kan du använda raw_input.

Exempel från interaktiva läget som du får om du kör "python" från kommandoprompten:

>>> namn = raw_input("filnamn: ")
input: ord.txt
>>> fil = open(namn)

Det är en bra ide att utnyttja dict för att räkna unika ord. Här är ett exempel som inte är hela lösningen, men som kanske kan hjälpa dig vidare:

>>> dict = {}
>>> ord = ["ett", "två", "tre"]
>>> for o in ord:
...   dict[o] = True
...
>>> dict
{'tre': True, 'tv\xc3\xa5': True, 'ett': True}
>>> len(dict)
3
>>> dict.pop("ett")
True
>>> dict
{'tre': True, 'tv\xc3\xa5': True}
>>> len(dict)
2
>>>
Baguesses 95
Postad: 18 sep 12:57

Tack för svaret! Jag läste uppgiften igen och insåg att man inte behövde dictionarys och tror det här borde fungera:

vanligaord = open(r'C:\Users\Downloads\Vanligaord.txt')
read1 = vanligaord.read()
innehall1 = read1.split()
fil = input('Vilken fil vill du läsa in? ')
inputfil = open(fil)
read2 = inputfil.read()
innehall2 = read2.split()
skillnad = []
for element in innehall2:
    if element not in innehall1:
        skillnad.append(element)
print('Texten innehåller ' + str(len(innehall2)) + ' ord')
print('Funnit ' + str(len(skillnad)) + ' ovanliga ord:')
print(*set(skillnad), sep = "\n")
manik 36
Postad: 18 sep 22:34

Ser jättebra ut. Glöm inte ta bort dubletterna när du räknar ut antalet på näst sista raden - om de ska bort vill säga. Det var inte helt tydligt i uppgiften.

print('Funnit ' + str(len(set(skillnad))) + ' ovanliga ord:')

Om du tröttnar på att plussa ihop strängar, så finns det ett par andra alternativ.

print('Funnit ' + str(x) + ' ovanliga ord:')
print('Funnit {} ovanliga ord:'.format(x))
print(f'Funnit {x} ovanliga ord:')
Baguesses 95
Postad: 19 sep 00:04

I uppgiften skulle dubbletter inte räknas med så schysst att du poängterade det, tack för hjälpen!

Svara Avbryt
Close