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')
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
>>>
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")
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:')
I uppgiften skulle dubbletter inte räknas med så schysst att du poängterade det, tack för hjälpen!