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]))
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/
dziękuje
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)
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