DaftAcademy / daftacademy-python_4beginners-autumn2020

daftacademy-python_4beginners-autumn2020
9 stars 5 forks source link

Wykład 4 - liczba palindromiczna. #12

Open mkowals9 opened 3 years ago

mkowals9 commented 3 years ago

Na jakiej podstawie trzeba zmienić ułamek 0.1, aby był palindromem? Mam na myśli: jaka musi być wartość, aby assert is_palindrome(0.1) zwracał True? W wikipedii jest wspomiane tylko o liczbach całkowitych nieujemnych, ale nawet sprawdzając ten warunek nadal test nie przechodzi :/

JWilczynski97 commented 3 years ago

Nie wiem, czy dobrze rozumiem Twoje pytanie, ale spróbuję odpowiedzieć. Liczba 0.1 oczywiście palindromem nie jest (tak jak każdy ułamek). Podobnie każda liczba ujemna palindromem nie będzie. W związku z tym dla obu tych przypadków nasza funkcja powinna zwrócić błąd typu ValueError. Z pewnością jest kilka sposobów na rozwiązanie tego. Ja np. wykorzystałem instrukcję if aby na początku funkcji sprawdzić czy któryś z tych warunków jest spełniony. Jeżeli tak, to zwracam odpowiedni błąd z pomocą instrukcji raise. Jeśli nie, to sprawdzam czy ta liczba jest palindromem. Wszystkie testy przechodzą :)

mkowals9 commented 3 years ago

Problem raczej mam w tym co powinno się dziać w przypadku łapania wyjątku - oczywiście, jeśli liczba nie jest palindromem to w obsłudze wyjątku ValueError funkcja powinna zwrócić False, czyż nie? Z tego powodu testy mi nie przechodzą :( A przynajmniej tak mi się wydaje

JWilczynski97 commented 3 years ago

Moja funkcja tylko wywołuje błąd ValueError, jeżeli warunek w instrukcji if jest spełniony i nie obsługuje go. Testy przechodzą.

wdebsqi commented 3 years ago

U mnie podobnie do @JWilczynski97. Wystarczyło na początku is_palindrome zrobić prostego ifa, który sprawdza czy argument jest intem. Jeżeli nie, wywala ValueError.

mateusz91t commented 3 years ago

a jak zwracacie infinite_sequence generator?

wywala mi się test assert inspect.isgeneratorfunction(infinite_sequence)

znalazłem w netach takie coś: def isgeneratorfunction(obj): """Return true if the object is a user-defined generator function. Generator function objects provide the same attributes as functions. See help(isfunction) for a list of attributes.""" return _has_code_flag(obj, CO_GENERATOR)

czyli chyba trzeba

type(infinite_sequence) == generator tymczasem mam type(infinite_sequence) == function type(infinite_sequence()) == generator

Czy w związku z tym trzeba do nazwy funkcji przypisać jakoś generator ??

mateusz91t commented 3 years ago

mój problem rozwiązany - yield zamiast pętli z generatorem rozwiązuje problem