Licznik liter

0

Hejka,
Dopiero zaczynam swoją przygodę w Pythonie i mam pytanie dotyczące jednego kodu:
screenshot-20220416195254.png

Jest to program, który zlicza ilość literek w podanym słowie i wypisuje je w słowniku, ale nie rozumiem, dlaczego w linijce

else:
  dict[i] = 1

wartość dla klucza jest równa 1? Wstawiałam już inne wartości, np. 0 i program podał mi ilość literek w słowie mniejszą o 1. Bardzo prosiłabym o pomoc :)

4

No bo jak nie było takiej litery w słowniku a zaczynasz zliczać no to zaczynasz od jedynki i dlatego dajesz 1, a nie jak próbowałaś 0. Jak na przykład liczysz książki na biurku to nie zaczynasz od zera jak zobaczysz pierwszą książkę.

4
  1. przelatujesz przez wszystkie literki w danym tekście
  2. co oznacza, że każda litera, przez którą przelecisz, będzie występowała co najmniej raz (dlatego 1, a nie 0)
  3. jednak musisz to gdzieś zapisać, tę jedynkę, więc robisz dict[i] = 1, co tworzy nowy klucz w słowniku.
  4. następnie jak natrafisz na literę, która już była, to powiększasz liczbę wystąpień o 1 (dict[i] += 1), a jeśli nie, to robisz to, co w punkcie 3, czyli dodajesz nowy klucz do słownika.

Ogólnie przeleć sobie przez cały kod myślą albo powstawiaj więcej printów, żeby mieć lepsze wyobrażenie, co się kiedy dzieje (albo jakiś step debugger, nie wiem, nie piszę na codzień w Pythonie)

4

W Pythonie możesz napisać prostszy kod do zliczania liter.
Użyj collections.Counter: https://docs.python.org/3/library/collections.html#collections.Counter

from collections import Counter
s = "ala ma kota"
print(Counter(s))
# wynik: Counter({'a': 4, ' ': 2, 'l': 1, 'm': 1, 'k': 1, 'o': 1, 't': 1})

W razie potrzeby, ze słownika wynikowego można wywalić znaki białe itd.

1

Tak dla uzupelnienia - alternatywnie do Countera ktory jest najlepszym wyborem dla tego problemu mozna zrobic rowniez tak:

from collections import defaultdict

a = "ala ma kota"
counter = defaultdict(int)
for char_ in a:
    counter[char_] += 1

defaultdict(<class 'int'>, {'a': 4, 'l': 1, ' ': 2, 'm': 1, 'k': 1, 'o': 1, 't': 1})

1

Dla początkującego chyba tak byłoby najprościej do zrozumienia(bez użycia dodatkowego modułu):

text = "ala ma kota"

counter = {}
for i in text:
    counter[i] = counter.get(i, 0) + 1

1 użytkowników online, w tym zalogowanych: 0, gości: 1