Zadanie 3 - CRC #27

Closed
s426284 wants to merge 10 commits from s426284/DALGLI0:zad3 into master
First-time contributor
No description provided.
Owner

Proszę sprawdzić, czy program jest w stanie wygenerować FCS i sprawdzić go dla wiadomości "Hello_world"

Proszę sprawdzić, czy program jest w stanie wygenerować FCS i sprawdzić go dla wiadomości `"Hello_world"`
Author
First-time contributor

Błąd naprawiony, teraz poprawnie sprawdza wiadomości.

Błąd naprawiony, teraz poprawnie sprawdza wiadomości.
Owner

Raczej miałem na myśli co innego:

W chwili obecnej fcs jest kodowany jako pewne (nieczytelne, czasami) znaki we wiadomości; tymczasem fcs, to po prostu binarna reszta z dzielenia wielomianu więc nie powinna być w ten traktowana jako znaki (z resztą: w jakim kodowaniu?!); Wbrew temu co (mój, nieprecyzyjny) opis sugeruje wejście do programu sprawdzającego poprawność nie jest typu ASCII (bo fcs nie jest): to po prostu tabela liczb heksadecymalnych w których pierwsze (n-2) liczby są mniejsze od 127.

wyjście więc powinno być typu bytesarray:

>>> msg = 'Hello_world'
>>> out = bytearray(msg, 'ascii')`
>>> out.append(fcs(msg))
>>> out
bytearray(b'Hello_world\xc3\n')
>>> message = out[0:-2].decode('ascii')
>>> @assert message == msg
Raczej miałem na myśli co innego: W chwili obecnej fcs jest kodowany jako pewne (nieczytelne, czasami) znaki we wiadomości; tymczasem fcs, to po prostu binarna reszta z dzielenia wielomianu więc nie powinna być w ten traktowana jako znaki (z resztą: w jakim kodowaniu?!); Wbrew temu co (mój, nieprecyzyjny) opis sugeruje wejście do programu sprawdzającego poprawność nie jest typu ASCII (bo fcs nie jest): to po prostu tabela liczb heksadecymalnych w których pierwsze (n-2) liczby są mniejsze od 127. wyjście więc powinno być typu bytesarray: ```python >>> msg = 'Hello_world' >>> out = bytearray(msg, 'ascii')` >>> out.append(fcs(msg)) >>> out bytearray(b'Hello_world\xc3\n') >>> message = out[0:-2].decode('ascii') >>> @assert message == msg ```
Author
First-time contributor

Ponownie poprawiłem kod, zmieniając input dla sprawdzenia poprawności. Teraz przy kodowaniu program zwraca wejściową wiadomość oraz FCS w postaci listy liczb heksadecymalnych. Przy sprawdzaniu poprawności należy podać string oraz listę liczb heksadecymalnych (która z przyczyn technicznych musi być w cudzysłowie).

python3 crc16.py -c "Hello_world" "['0xc5', '0xe']"

Nie jest to co prawda w pełni sposób, który Pan Doktor zaproponował, ale znacznie ułatwia on użytkowanie programu, w porównaniu do wprowadzania wiadomości w systemie heksadecymalnym.

Ponownie poprawiłem kod, zmieniając input dla sprawdzenia poprawności. Teraz przy kodowaniu program zwraca wejściową wiadomość oraz FCS w postaci listy liczb heksadecymalnych. Przy sprawdzaniu poprawności należy podać string oraz listę liczb heksadecymalnych (która z przyczyn technicznych musi być w cudzysłowie). ``` python3 crc16.py -c "Hello_world" "['0xc5', '0xe']" ``` Nie jest to co prawda w pełni sposób, który Pan Doktor zaproponował, ale znacznie ułatwia on użytkowanie programu, w porównaniu do wprowadzania wiadomości w systemie heksadecymalnym.
Owner

ok, uwagi do kodu:

  1. po to piszemy klasy, oraz posługujemy się idiomem if __name__ == "__main__":, żeby klasy rezydowały w pliku który można załączać/używać w kolejnych projektach; Dlaczego Pan tego nie robi?

  2. Zgodzę się z sugestią, że użytkownikowi crc16.py znacznie łatwiej wprowadzać w ten sposób fcs. Natomiast konwersja user-input do wersji która jest najstrawniejsza dla komputera (czytaj bytearray) powinna odbywać się właśne w __main__ (lub specjalnej funkcji do tego przeznaczonej).

  3. encode powinno przyjmować string (wiadomość) i wielomiany generujące (M, L, G), które mogą mieć przypisane wartości default (na potrzeby zdania)

Modularność jest istotą programowania obiektowego.

ok, uwagi do kodu: 1. po to piszemy klasy, oraz posługujemy się idiomem `if __name__ == "__main__":`, żeby klasy rezydowały w pliku który można załączać/używać w kolejnych projektach; Dlaczego Pan tego nie robi? 2. Zgodzę się z sugestią, że użytkownikowi `crc16.py` znacznie łatwiej wprowadzać w ten sposób fcs. Natomiast konwersja user-input do wersji która jest najstrawniejsza dla komputera (czytaj `bytearray`) powinna odbywać się właśne w `__main__` (lub specjalnej funkcji do tego przeznaczonej). 3. `encode` powinno przyjmować `string` (wiadomość) i wielomiany generujące (`M, L, G`), które mogą mieć przypisane wartości default (na potrzeby zdania) Modularność jest istotą programowania obiektowego.
kalmar closed this pull request 2018-06-29 01:03:32 +02:00

Pull request closed

Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: kalmar/DALGLI0#27
No description provided.