Rozwiązane

W pliku napisy.txt znajduje się 1000 napisów o długościach od 2 do 16 znaków, każdy
napis w osobnym wierszu. W każdym napisie mogą wystąpić jedynie dwa znaki: „0” lub „1”.
W języku python napisz program, za pomocą którego
uzyskasz odpowiedzi na poniższe polecenia. Odpowiedzi zapisz w pliku zadanie4.txt
a) Podaj, ile jest napisów o parzystej długości.
b) Podaj, ile jest napisów, które zawierają taką samą liczbę zer i jedynek.
c) Podaj, ile jest napisów składających się z samych zer, oraz podaj, ile jest napisów
składających się z samych jedynek.
d) Dla każdej liczby k = 2, 3, ...,16 podaj liczbę napisów o długości k znajdujących się
w pliku napisy.txt, tzn. podaj, ile jest napisów 2-znakowych, ile jest napisów
3-znakowych itd.



Odpowiedź :

Bascio

W załączniku wstarczy zmienić .txt na .py ;)

parzyste = 0

rowno = 0

sameZera = 0

sameJedynki = 0

k = [0 for _ in range(15)]

with open('napisy.txt', 'r') as f:

   for line in f.read().splitlines():

       length = len(line)

       k[length - 2] += 1

       if length % 2 == 0:

           parzyste += 1

       zera = line.count('0')

       jedynki = line.count('1')

       if zera == jedynki:

           rowno += 1

       elif zera < 1:

           sameJedynki += 1

       elif jedynki < 1:

           sameZera += 1

with open('zadanie4.txt', 'w') as f:

   f.write("Liczba napisów parzystej długości - {}\n".format(parzyste))

   f.write("Liczba napisów zwierające taką samą liczbę zer i jedynek - {}\n".format(rowno))

   f.write("Liczba napisów zawierające same zera - {}\n".format(sameZera))

   f.write("Liczba napisów zawierające same jedynek - {}\n".format(sameJedynki))

   for i, x in enumerate(k):

       f.write("Liczba napisów {} znakówych - {}\n".format(i+2, x))

Zobacz obrazek Bascio