Managery kontekstu i inne ciekawe przypadki


    
    1. Managery kontekstu
    from faulty_lib import faulty_generator

    # Otwieramy plik wynik.txt w trybie zapisu
    with open("wynik.txt", "w") as file:
        # Tworzymy pętlę nieskończoną
        while True:
            # Pobieramy następną wartość z generatora
            value = next(faulty_generator())
            
            # Sprawdzamy, czy generator się zakończył
            if value is None:
                break
            
            # Zapisujemy wartość w pliku
            file.write(value + "\n")



- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    2. Tworzenie własnych managerów kontekstu
    class list_builder:
      def __enter__(self):
          # Tworzymy pustą listę i zwracamy ją jako wynik
          self.result = []
          return self.result
  
      def __exit__(self, exc_type, exc_value, traceback):
          # Sprawdzamy, czy w ciele wyrażenia with wystąpił wyjątek
          if exc_type is None:
              # Jeśli nie ma wyjątku, wypisujemy komunikat z zawartością listy
              print("list has been built with elements:", self.result)
          else:
              # Jeśli wystąpił wyjątek, wypisujemy tylko komunikat
              print("list has been built with elements:", self.result)
              # Zwracamy False, aby wyjątek został przechwycony
              return False



- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    3. Operator warunkowy
    def sign(number):
      return 1 if number > 0 else -1 if number < 0 else 0

    
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    4. Operator warunkowy - droga do szkoły
    def estimate(x, t, v):
      return "Yes" if t / 60 >= x / v else "No"


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    5. Operator-mors
    def read_good_letters(fname):
      with open(fname) as file:
          content = ''
          while (char := file.read(1)) != '' and char.lower() != 'k':
              content += char
          return content


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    6. Operator mors - analizowanie danych
    from dataDispenser import nextValue
    def analyze(size):
        total_sum = 0  # Inicjalizujemy zmienną do przechowywania sumy wyników większych niż 3.14
        
        for _ in range(size):
            value = nextValue()  # Wywołujemy funkcję nextValue() z biblioteki dataDispenser
            if value > 3.14:
                total_sum += value  # Dodajemy wynik do sumy tylko jeśli jest większy niż 3.14
        
        return total_sum  # Zwracamy sumę wyników większych niż 3.14

    
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    7. Sprawdzanie typu obiektu
    def compareTypes(arg1, arg2):
      return isinstance(arg1, type(arg2))  # Sprawdzamy, czy typ arg1 jest taki sam jak typ arg2


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    8. Ćwiczenie: zmień typ obiektu
    def switchType(arg):
      if isinstance(arg, (int, float)):
          return str(arg)  # Jeśli argument jest liczbą, przekształć go na znakowy i zwróć
      elif isinstance(arg, str):
          try:
              return int(arg)  # Jeśli argument jest ciągiem znaków, spróbuj przekształcić go na liczbę całkowitą
          except ValueError:
              try:
                  return float(arg)  # Jeśli nie uda się przekształcić na liczbę całkowitą, spróbuj na liczbę zmiennoprzecinkową
              except ValueError:
                  return arg  # Jeśli nie uda się przekształcić na liczbę, zwróć argument niezmieniony
      else:
          return arg  # Jeśli argument nie jest ani liczbą, ani ciągiem znaków, zwróć argument niezmieniony



- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -