result = {'word': '', 'unique_chars': 0}
with open('xd') as f:
for line in f:
word = line.strip().lower()
unique_chars = len(set(word))
if result['unique_chars'] < unique_chars: result = {'word': word, 'unique_chars': unique_chars}
print(f"{result['word']} {result['unique_chars']}")
Tłumaczenie tego co robimy:
- otwieramy plik f jako context - tak by nie musieć ręcznie robić .close()
- jako f otworzony nam został dany plik, oraz przekształcony w iterabla, po którym możemy iterować - iterowanie po nim spowoduje wczytywanie linijka po linijce - to robimy za pomocą pętli for
- jako word zapisujemy sobie daną linię (bo jedno słowo jest na linijkę) i usuwamy z niego białe znaki, znaki końca linii itd. metodą strip()
- potem tworzymy zmienną unique_chars, która będzie równa długości seta z danego słowa, set() to nic innego jak zbiór unikalnych elemntów z danego iterabla, a stringi w pythonie są iterowalne, więc nie musimy castować na listę czy coś innego
- jeśli długość obecnego słowa - unique_chars jest większa od długości zapisanej w rezultacie, to wtedy uaktualniamy rezultat. Dzięki temu, że mamy tu < a nie <= to rezultat zostanie pierwszym jesli póxniej napotkamy inne słowa z taką samą liczbą znaków.
6, wyprintowujemy wynik
Można całość jeszcze skrócić jeśli nie dbmay o czytelność a tylko o LOC:
result = {'word': '', 'unique_chars': 0}
with open('xd') as f:
for line in f:
if result['unique_chars'] < len(set(line.strip().lower())): result = {'word': line.strip().lower(), 'unique_chars': len(set(line.strip()))}
Edit - nie wiem, czy A i a są tutaj traktowane jako różne litery, ale jeśli tak, to trzeba wyrzucić .lower()