Temat 15: Powtórzenie (III)

Wstecz; Ostatnia modyfikacja: 24.04.2015
  • Ćwiczenie 1: co jest wynikiem działania tego kodu:
  • def f(a,b):
      if len(a) < 1:
        return b
      else:
        b.append(a[0])
        return f(a[1:], b)
    
    print(f((1,2),[3,4]))
    
  • Ćwiczenie 2: napisz funkcję, która łaczy dwie listy w sposób jak w przykładzie: f([a,b,c,d,e,f], [1,2,3]) -> [a,1,b,2,c,3,d,e,f].
  • Przykład dekoratora, który liczy czas wykonania danej funkcji
  • def count_calls(fun):
      def res_fun(*args, **kwargs):
        res_fun.count += 1
        print(res_fun.count)
        res = fun(*args, **kwargs)
        return res
      res_fun.count = 0
      return res_fun
    
  • Dekorator, który przyjmuje parametry
  • def returns(rtype):
      def check_returns(f):
        def res_fun(*args, **kwargs):
          result = f(*args, **kwargs)
          if not isinstance(result, rtype):
            print("return value %r does not match %s" % (result,rtype))
          return result
        return res_fun
      return check_returns
    
  • Kod testujący
  • @returns(float)
    @count_calls
    def factorial(n):
      if n<=1:
        return n
      else:
        return n*factorial(n-1)
    
    f = factorial(4)
    
  • Ćwiczenie 3: napisz dekorator o nazwie count_calls, który liczy wywołania danej funkcji
  • Ćwiczenie 4: napisz dekorator o nazwie ask_exe, który pyta przed każdym uruchomieniem danej funkcji o to czy kontunuować
  • Ćwiczenie 5: napisz dekorator o nazwie login_required, który sprawdza poprawność hasła (zaszyfrowanego). Potencjalnie przydany kod.
  • import getpass, hashlib
    
    print(hashlib.md5('password').hexdigest())
    
    PASSWORD_HASH = "5f4dcc3b5aa765d61d8327deb882cf99"
    password = getpass.getpass("What's the password? ")
    password_hash = hashlib.md5(password).hexdigest()
    
    if password_hash == PASSWORD_HASH:
        print "user authenticated"
    else:
        print "user authentication failed"
    
  • Ćwiczenie 6: napisz funkcję is_anagram(a,b), która sprawdza czy słowo a jest anagramem słowa b
  • Ćwiczenie 7: napisz funkcję is_palindrome(a), która sprawdza czy słowo (lub lista) a jest palindromem.
  • Ćwiczenie 8: napisz funkcję longest_palindrome(a), która zwraca długość najdłuższego podsłowa słowa a, które jest palindromem.
  • Ćwiczenie 9: dla danej tablicy w numpy policz liczbę komórek, że wartość w nich jest większa niż wartość w 4 sąsiednich komórkach.
  • Ćwiczenie 10: napisz program, który dla danej tablicy w numpy, zawierającej "x" (wieże) i "." (puste pola), sprawdza, czy któreś dwie wieże się atakują.
  • Ćwiczenie 11: napisz dekorator, który przy każdym uruchomieniu wypisuje datę i godzinę uruchomienia funkcji.