3113 - Count Words

De la Universitas MediaWiki

Cerința

Se dă un șir de caractere care conține litere mici și mari ale alfabetului englez, spații și semne de punctuație. Să se afișeze fiecare cuvânt și frecvența de apariție a lui în șirul de caractere pe câte o linie fiecare pereche cuvânt-frecvență ordonate lexicografic.

Date de intrare

Programul citește de la tastatură un șir de caractere.

Date de ieșire

Programul va afișa pe ecran pe câte o linie fiecare cuvânt și frecvența lui de apariție în șir.

Restricții și precizări

  • 1 ≤ strlen(sir) ≤ 10000;

Exemplul 1

Intrare
Ana are mere si prune si pere, insa Ana nu are masina si casa.
Ieșire
Datele de intrare corespund restricțiilor impuse.
Ana 2
are 2
casa 1
insa 1
masina 1
mere 1
nu 1
pere 1
prune 1
si 3

Exemplul 2

Intrare
1234
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#3113 - Count Words
import string

def calculeaza_frecventa_cuvinte(s):
    s = s.translate(str.maketrans('', '', string.punctuation))  # eliminăm semnele de punctuație din șirul de caractere
    cuvinte = s.split()  # separăm șirul în cuvinte
    frecventa_cuvinte = {}  # dicționar pentru a stoca frecvența cuvintelor

    # calculăm frecvența cuvintelor
    for cuvant in cuvinte:
        if cuvant in frecventa_cuvinte:
            frecventa_cuvinte[cuvant] += 1
        else:
            frecventa_cuvinte[cuvant] = 1

    cuvinte_sortate = sorted(frecventa_cuvinte.keys())  # sortăm cuvintele în ordine alfabetică

    # afișăm cuvintele și frecvența lor
    for cuvant in cuvinte_sortate:
        print(cuvant, frecventa_cuvinte[cuvant])


if __name__ == '__main__':
    s = input('Introduceți șirul: ')
    if len(s) <= 10000 and not any(c.isdigit() for c in s):  # verificarea restricțiilor
        print("Datele de intrare corespund restricțiilor impuse.")
        calculeaza_frecventa_cuvinte(s)  # calculăm și afișăm frecvența cuvintelor
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")