Kashub's Code Barn - "Python"

podświetlone jako plsql (dodał(a) Majster @ 2022-08-23 17:47:35)

Twoja wyszukiwarka
Podświetl ten kod w:
Ostatnio dodane:
Losowe wpisy:
# !!!!! Przed uruchomieniem skryptu WYŁĄCZYĆ EXCELA !!!!
# zmieić miejsce dźwięku
 
# w cmd: pip install playsound, pandas, datetime, xlsxwriter, pyinstaller
# generowanie pliku exe (bez kodu)
# cmd: pyinstaller.exe main.py --onefile -i ico.ico --name PomiarKardiocepcji
 
# Import metod z klas
# FROM <klasa> import <metoda>
FROM TIME import sleep
FROM random import choice
FROM datetime import datetime
FROM os import system
FROM sys import EXIT, exc_info
FROM pandas import DataFrame, ExcelWriter
FROM playsound import playsound
FROM vlc import MediaPlayer
FROM LOG import LOG
 
IF(__name__ == "__main__"):
    # Przypisanie pliku audio
    audio = "ding.mp3"
 
    # Wywołanie instancji klas
    LOG = LOG()
    media = MediaPlayer(audio)
 
    LOG.info("Start programu")
 
    id_patient = input("Wpisz numer pacjenta: ")
    LOG.info(f"Użytkownik wpisał numer pacjenta: {id_patient}")
 
    #### Przygotowanie stringów ####
    instructions = """
    Bierzesz udział w badaniu sprawdzającym jeden ze składników zmysłu interocepcji - kardiocepcję. 
    Twoje zadanie będzie polegało na liczeniu, ile uderzeń serca czujesz w podanym okienku czasowym.
    O momencie rozpoczęcia liczenia będziesz poinformowany sygnałem dźwiękowym.
    Proszę skup się na swoich odczuciach i nie wspomagaj się dodatkowymi urządzeniami mierzącymi aktywność Twojego serca.
    """
    relax = "Zrelaksuj się, oddychaj spokojnie..."
    info_count_heart = "Za chwilę usłyszysz sygnał dźwiękowy. Po sygnale rozpocznij liczenie uderzeń serca"
 
    ### Koniec przygotowania stringów 
 
    # Wyświetlanie zmiennej instructions
    print(instructions)
    LOG.info(f"Wyświetlenie instrukcji")
    # Zatrzymanie skryptu na 5 sekund
    sleep(5)
    # Interakcja użytkownika - w tym przypadku wywołanie metody input nie skutkuje niczym
    # Wartość funkcji input (tego co wpiszę użytkownik) nie jest nigdzie przekazywana dalej
    input("Jeżeli przeczytałeś/aś wciśnij jakiś klawisz: ")
    LOG.info(f"Użytkownik potwierdził instrukcję")
 
    # Wyświetlenie zmiennej relax
    print(relax)
    LOG.info(f"Wyświetlono relaks")
    # Zatrzymanie skryptu na 10 sekund
    sleep(10)
 
    # tablica sekund DO losowania
    tab_seconds = [30, 45, 60]
 
    # Stworzenie pustej tablicy, DO której będą wpisywane dane pod wyciąg w excelu
    tmp_for_excel_tab = []
 
 
 
    # Stworzenie pętli
    # W dosłownym tłum. dla wartości "i" przypisz kolejno wartości od 1 DO 4 (+1 bo liczy od 0, dlatego 6)
    # z przesunięciem o 1 (bo można też np. 0,5... o 2 itd.)
    FOR i IN RANGE(1, 5, 1):
        # Stworzenie pętli
        # W dosłownym tłum. dla wartości "j" przypisz kolejno wartości od 1 DO 3 (+1 bo liczy od 0, dlatego 5)
        # z przesunięciem o 1 (bo można też np. 0,5... o 2 itd.)
        FOR j IN RANGE(1, 4, 1):
            # czyść TO co już zostało napisane w konsoli
            system("cls")
            LOG.info(f"Wyczyszczono cmd")
            print(info_count_heart)
            LOG.info(f"Wyświetlono informację o sygnalę dźwiękowym")
            # przypisanie DO zmiennej accept tego co wpisze użytkownik
            accept = input("Jesteś gotowy/a?: ")
            LOG.info(f"Użytkownik potwierdził gotowość")
            # Jeżeli TO co napisał użytkownik i zmienisz TO na małe znaki = "nie" lub "n"
            # TO: 
            # 1. napisz "Zamykam program"
            # 2. zatrzymaj program na 5 sekund (tak, aby zdążył TO przeczytać)
            # 3. komenda EXIT() zamyka cały program
            IF((accept.LOWER() == "nie") OR (accept.LOWER() == "n")):
                print("Zamykam program.")
                sleep(5)
                EXIT()
 
            # DO zmiennej seconds przypisz wylosowaną wartość z tab_seconds
            seconds = choice(tab_seconds)
            LOG.info(f"Wylosowano {seconds} sekund")
            sleep(5)
            print(f"Po sygnale licz liczbę uderzeń serca przez {seconds} sekund.")
            sleep(3)
            try:
                playsound(audio)
                LOG.info(f"Odtworzono dźwięk")
 
            except:
                LOG.EXCEPTION(exc_info())
                try:
                    LOG.warning("Próbuję innego kodeka audio")
                    media.play()
 
                except:
                    LOG.EXCEPTION(exc_info())
 
                finally:
                    media.stop()
 
            LOG.info(f"Odtworzono dźwięk")
            LOG.info(f"Start odliczania")
            # DO zmiennej time_start przypisz aktualny czas i sformatuj go DO HH:MM:SS.F RRRR-MM-DD
            time_start = datetime.now().strftime("%H:%M:%S.%f")
            LOG.info(f"Zastopowano program na {seconds} sekund")
            sleep(seconds)
            print("Koniec liczenia...")
            LOG.info(f"Koniec odliczania")
            time_end = datetime.now().strftime("%H:%M:%S.%f")
 
            try:
                playsound(audio)
                LOG.info(f"Odtworzono dźwięk")
 
            except:
                LOG.EXCEPTION(exc_info())
                try:
                    LOG.warning("Próbuję innego kodeka audio")
                    media.play()
 
                except:
                    LOG.EXCEPTION(exc_info())
 
                finally:
                    media.stop()
 
            finally:
                print("Wystąpił problem z odtworzeniem dźwieku\n")
 
 
            # Stworzenie walidacji na TO co wpisuje użytkownik
            # Wykonuj dopóki nie ma błędu
            WHILE TRUE:
                # Obsługa wyjątku try: <kod> except: <obsługa błędu>
                try:
                    # DO zmiennej user_count_hear przypisz LICZBOWĄ CAŁKOWITĄ wartość tego co wpiszę użytkownik
                    user_count_heart = int(input("Ile uderzeń naliczyłeś/aś?: "))
                    LOG.info(f"Użytkownik wpisał {user_count_heart} uderzeń")
 
                except ValueError:
                    print("Wpisana wartość musi być liczbą !")
                    LOG.error("Użytkownik wpisał wartość niebędącą liczbą")
                    # Jeżeli wystąpi błąd ValueError
                    # komenda continue tworzy nową iterację pętli WHILE
                    continue
 
                ELSE:
                    # Jeżeli nie wpadł w błąd TO komenda break przerywa pętlę
                    break
 
            # DO pustej tablicy dodaj kolejno wszystkie parametry
            tmp_for_excel_tab.append([seconds, user_count_heart, time_start, time_end])
            LOG.info("Dodano wartości do tablicy tymczasoej")
 
            print(relax)
            LOG.info(f"Wyświetlono relaks")
            sleep(10)
            LOG.info(f"Zatrzymanie programu na 10 sekund")
        print(f"Koniec {i} serii...")
        LOG.info(f"Koniec {i} serii...")
        sleep(5)
 
    # Zadeklarowanie nazwy pliku excel
    output_file = f"Wynik_{id_patient}.xlsx"
    # DO zmiennej df przypisujemy stworzenie obieku typu DataFrame (taka tabelka excelowa w formie Pythonowej)
    # Z danymi w zmiennej tmp_for_excel_tab oraz kolumnami, które nazywają się columns=[...]
 
    WHILE TRUE:
        ok = FALSE
        try:
            df = DataFrame(tmp_for_excel_tab, columns=["Wylosowany czas", "Liczba uderzeń wpisana przez pacjenta", "Czas startu", "Czas zakonczenia"])
            LOG.info(f"Stworzenie DataFrame (inside Excel)")
            # DO zmiennej output deklarujemy, że TO będzie plik w formacie excelowym na silniku xlsxwriter
            output = ExcelWriter(output_file, engine="xlsxwriter")
            LOG.info(f"Zadeklarowano plik wyjściowy")
            # obiekt typu Dataframe eksportuj DO pliku excel, gdzie arkusz ma się nazywać "Wyniki"
            df.to_excel(output, sheet_name="Wyniki")
            LOG.info(f"Eksport danych")
            # DO zmiennej workbook przypisz plik excel
            workbook = output.book
            # DO zmiennej worksheet przypisz arkusz "Wyniki"
            worksheet = output.sheets["Wyniki"]
 
 
            # deklarujemy format komórek, aby ładnie wyglądało
            format_data = workbook.add_format()
            # przypisz DO format_data wyrównanie centralnie w pionie
            format_data.set_align("vcenter")
            # przypisz DO format_data wyrównanie centralnie w poziomie
            format_data.set_align("center")
 
            # Nagłowek ma inne właściwości w excelu niż dane
            # Dlatego Nagłowek musi mieć dedykowane formatowanie
            format_header = workbook.add_format({
                "bold": TRUE,
                "text_wrap": TRUE,
                "valign": "vcenter",
                "align": "center",
                "border": 1,
                "fg_color": "#fffba6"
            })
 
            # Tworzymy pętle, z której dla wiersza pierwszego (liczymy od 0)
            # przypisujemy dla kolumny pierwszej col_num (liczymy od 0) wartość VALUE i formatowanie
            # idziemy kolumnami col_num +1 po przejściach z pętli
            FOR col_num, VALUE IN enumerate(df.columns.VALUES):
                worksheet.WRITE(0, col_num+1, VALUE, format_header)
 
            # Przypisujemy dla wcześniej zadeklarowanego worksheet ("Wyniki")
            # dla kolumn od B DO D
            # szerokość kolumny 20.71 (trzeba wejść DO excela i rozszerzyć kolumnę na tyle pixeli ile chcemy), a obok jest podana wartość w formie takiej formie
            # formatowanie zadeklarowane jako format_data
            worksheet.set_column("B:C", 20.71, format_data)     # tutaj akurat 20.71 TO 150 px
            worksheet.set_column("D:E", 27.86, format_data)
            LOG.info(f"Ustawiono formatowanie")
            # Zapisujemy plik
            output.CLOSE()
            LOG.info(f"Zapis pliku")
            ok = TRUE
 
        except:
            input(exc_info()[:-1])
            print("Jeżeli jest access denied to zamknij plik excel.")
            LOG.EXCEPTION(exc_info())
            ok = FALSE
 
        finally:
            IF(ok == TRUE):
                break
 
 
    print(relax)
    LOG.info(f"Wyświetlono relaks")
    LOG.info(f"Zatrzymanie programu na 5 min")
    # 5*60 TO 5 MIN
    sleep(5*60)
    print("Koniec eksperymentu!")
    EXIT()
| Sklep z artykułami dla dzieci | | Wózki dla dzieci | | Opony letnie | | Blog o książkach | | Blogi za darmo | | Gdzie przenieść blog za darmo? | | Kody programów | | Skracacz linków | | Smutne Opisy | | Opisy GG |