# Scitacka binarnich cisel # Stavy: # * cekame_na_prvni_cislo # * cteme_prvni_cislo # * mame_prvni_cislo # * mame_operator # * cteme_druhe_cislo # * mame_druhe_cislo # * mame_rovna_se znaky_prvniho_cisla = [] znaky_druheho_cisla = [] znaky_operatoru = [] vysledek = "" def pridej_znak_prvnimu_cislu(znak): znaky_prvniho_cisla.append(znak) def pridej_znak_druhemu_cislu(znak): znaky_druheho_cisla.append(znak) def pridej_znak_operatoru(znak): znaky_operatoru.append(znak) def spocti(znak): global vysledek a = int("".join(znaky_prvniho_cisla), 2) b = int("".join(znaky_druheho_cisla), 2) if znaky_operatoru == ["+"]: vypocteno = a + b else: raise ValueError(znaky_operatoru) vysledek = f"{vypocteno:b}" prechody_mezi_stavy = { (" ", "cekame_na_prvni_cislo"): ("cekame_na_prvni_cislo", None), ("0", "cekame_na_prvni_cislo"): ("cteme_prvni_cislo", pridej_znak_prvnimu_cislu), ("1", "cekame_na_prvni_cislo"): ("cteme_prvni_cislo", pridej_znak_prvnimu_cislu), ("0", "cteme_prvni_cislo"): ("cteme_prvni_cislo", pridej_znak_prvnimu_cislu), ("1", "cteme_prvni_cislo"): ("cteme_prvni_cislo", pridej_znak_prvnimu_cislu), (" ", "cteme_prvni_cislo"): ("mame_prvni_cislo", None), (" ", "mame_prvni_cislo"): ("mame_prvni_cislo", None), ("+", "mame_prvni_cislo"): ("mame_operator", pridej_znak_operatoru), ("-", "mame_prvni_cislo"): ("mame_operator", pridej_znak_operatoru), (" ", "mame_operator"): ("mame_operator", None), ("0", "mame_operator"): ("cteme_druhe_cislo", pridej_znak_druhemu_cislu), ("1", "mame_operator"): ("cteme_druhe_cislo", pridej_znak_druhemu_cislu), ("0", "cteme_druhe_cislo"): ("cteme_druhe_cislo", pridej_znak_druhemu_cislu), ("1", "cteme_druhe_cislo"): ("cteme_druhe_cislo", pridej_znak_druhemu_cislu), (" ", "cteme_druhe_cislo"): ("mame_druhe_cislo", None), (" ", "mame_druhe_cislo"): ("mame_druhe_cislo", None), ("=", "mame_druhe_cislo"): ("mame_rovna_se", spocti), } def nacti_a_spocitej(vstup): print(vstup) stav = "cekame_na_prvni_cislo" vstup_list = list(vstup) while stav != "mame_rovna_se": precteno = vstup_list.pop(0) try: stav, operace = prechody_mezi_stavy[(precteno, stav)] except KeyError: raise ValueError("CHYBA VSTUPU!") from None if operace is not None: operace(precteno) print("nacetli jsme:", znaky_prvniho_cisla, znaky_operatoru, znaky_druheho_cisla) print(vysledek) nacti_a_spocitej(" 01011 + 111 =") print("---------------------") nacti_a_spocitej("101101+10001 =")