24.2.3.24010540. Napisati program koji traži od korisnika unos rečenice, a koji zatim ispisuje istu rečenicu šifriranu Cezarovom šifrom. Cezarova šifra spada u najstarije poznate sisteme šifrovanja, prema kojoj se svaki znak izvorne rečenice zamijenjuje sa znakom koji se po abecedi nalazi 3 znaka ispred (uz izuzetak posljednja tri znaka abecede, koji se mijenjaju sa prva tri znaka abecede), odnosno zamjena se vrši prema sljedećoj tablici:
Znaci koji nisu slova ostaju neizmijenjeni. Na primjer, ukoliko izvorna rečenica glasi “DANAS JE ZADNJI DAN LJETA”, šifrovana rečenica će glasiti “GDQDV MH CDGQML GDQ OMHWD”. Radi jednostavnosti, sve očitane znakove pretvarajte u velika slova. Uputa: ASCII šifre svih znakova u opsegu od „A‟ do „W‟ treba povećati za 3, a ASCII šifre znakova u opsegu od „X‟ do „Z‟ treba umanjiti za 23.
# 24010540
def caesar_cipher(text, shift, mode):
result = ""
for char in text:
if char.isalpha(): # Provjeri je li znak slovo
shift_amount = shift % 26 # Osiguraj da je pomak unutar raspona abecede
if mode == 'decode':
shift_amount = -shift_amount # Za dekodiranje, pomičemo unatrag
# Prilagodi pomak za velika i mala slova
if char.isupper():
result += chr((ord(char) + shift_amount - 65) % 26 + 65)
else:
result += chr((ord(char) + shift_amount - 97) % 26 + 97)
else:
result += char # Ostavi ne-alfabetske znakove nepromijenjene
return result
def main():
print("Dobrodošli u aplikaciju za kodiranje i dekodiranje poruka!")
while True:
mode = input("Želite li 'kodirati' ili 'dekodirati' poruku? ").lower()
if mode not in ['kodirati', 'dekodirati']:
print("Molimo unesite 'kodirati' ili 'dekodirati'.")
continue
text = input("Unesite poruku: ")
shift = int(input("Unesite broj pomaka (1-25): "))
if shift < 1 or shift > 25:
print("Pomak mora biti između 1 i 25.")
continue
result = caesar_cipher(text, shift, mode)
print(f"Rezultat: {result}\n")
again = input("Želite li pokušati ponovo? (da/ne): ").lower()
if again != 'da':
break
if __name__ == "__main__":
main()
Ispis na ekranu:

Index
|
 |