Zadanie Zliczacz Liter

0

Cześć,
Mógłby ktoś wyjaśnić co jest źle w tym programie. Zadanie pochodzi z serwisu szkopuł - https://szkopul.edu.pl/c/plo155/p/zli/32568/.
alfabet = {}
n = int(input())
for i in range(n):
a = input()
for znak in a:
if znak != ' ':
alfabet[znak] += 1
for znak in alfabet:
if alfabet[znak] != 0:
print(str(znak) + " " + str(alfabet[znak]))

0

Tutaj Masz, nawet na kilka sposobów, Porównaj i wyjdzie co Masz nie tak:
https://www.geeksforgeeks.org/python-frequency-of-each-character-in-string/

0

dziękuje

0

Jakbys potrzebowal jeszcze sobie cos sprawdzic, to mozesz zerknac rowniez z mojego kodu. Nie jest tutaj na przyklad potrzebne wykorzystanie slownika, chociaz moze byc ono porzadane - zalezy kto to sprawdza i jaki efekt chce osiagnac.

import re #importuje biblioteke z regexami
#tworze iterator
class mojIterator1:
    def __init__(self,n):
        self.stop = n
    def __iter__(self):
        self.start = 0
        return self
    def __next__(self):
        if self.start < self.stop:
            x = self.start
            self.start += 1
            return x
        else: raise StopIteration
        
#funkcja przygotowuje posortowany zgodnie z wymogami ciag
def przygotujLitery(lancuch):
    litery = set(lancuch)
    s_mapped = sorted(list(map(ord,litery)))
    mapped_temp = []
    for s in s_mapped:
        if s >= 97: break
        mapped_temp.append(s)
    s_mapped = s_mapped[len(mapped_temp):]
    s_mapped.extend(mapped_temp)
    s = list(map(chr,s_mapped))
    return s

#wypisanie zliczonych liter
def podajStatystyki(lista,source):
    for l in lista:
        print(l,source.count(l))
        
#definicja zmiennej pomocniczej
tekst = ''
#wczytuje dane i tworze iterator
n = int(input())
lines = mojIterator1(n)
myiter_1 = iter(lines)
#wczytywanie danych cd
for x in myiter_1:
    zdanie = input()
    tekst+=zdanie
    
#parsuje tekst i odpalam funkcje
tekst = re.sub(r' ','',tekst)
litery = przygotujLitery(tekst)
podajStatystyki(litery,tekst)
0

Dostałeś dobre odpowiedzi, ale odpowiadając na pytanie z 1 posta ("co jest źle") to:
1)

for i in range(n):
a = input()
for znak in a:

przypisujesz w pętli do a, a potem iterujesz po a. ale a będzie stringiem, nie listą inputów. Musiałbys zrobić coś w stylu:

inputs = [input() for i in range(n)]
for znak in inputs:
   ...

alfabet[znak] += 1

dodajesz od razu do wartości, ale nigdzie nie zdefiniowałeś wartości domyślnej dla alfabet[znak]. Prosta wersja:

if znak in alfabet:
    alfabet[znak] += 1
else:
   alfabet[znak] = 1

albo można skorzystać z defaultdict:

from collections import defaultdict
alfabet = defaultdict(int)
for znak in inputs:
    alfabet[znak] +=1

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