1 / 6
Dec 2022

Taka mała zagadka w Python 3:
def Sprawdz(num: int) -> bool:
return any (n + int(str(n)[::-1]) == num for n in range(num + 1))

…no i czy to jest przykład dobrego programowania?

  • created

    Dec '22
  • last reply

    Dec '22
  • 5

    replies

  • 340

    views

  • 2

    users

  • 3

    likes

Funkcja sprawdza, czy dla zadanej liczby num, istnieje dowolna liczba A (mniejsza lub równa num), która zsumowana ze swoją odwrotnością (lustrzanym odbiciem) da w wyniku num.

Np dla 2, powinno zwrócić 1
dla 11 -> 10 i 1

Czy to jest dobre programowanie, to nie wiem, ale co mógłbym zasugerować:

def Sprawdz2(num):
  return any(n for n in range(num + 1) if (n + int(str(n)[::-1]) == num))
  1. Przy typach prostych nie musisz ich bezpośrednio określać.
  2. Powyższa pętla zwróci tylko elementy, które spełniają warunek, zamiast tworzyć tablicę true/false z wartościami dla każdego n

Jeśli chcesz tylko sprawdzić, czy istnieje taka liczba, to użyj next():

def Sprawdz3(num):
 	return next((1 for n in range(num + 1) if (n + int(str(n)[::-1]) == num)), 0)

Zgadza się. Dzięki.
Sprawdz2 faktycznie inaczej tworzy wynik ale nie umiem tego podejrzeć (“generator object”).
Sprawdz3 fajny pomysł…i można nawet zwracać wartość n po drobnej modyfikacji
return next((n for n in range(num + 1) if (n + int(str(n)[::-1]) == num)), 0)
tzn. pierwszą z tych wartości n co spełniają warunek.

Żeby generator zwrócił listę elementów, możesz zrobić tak:

def Sprawdz2(num):
  return [n for n in range(num + 1) if (n + int(str(n)[::-1]) == num)]