Ovaj tvoj program je loš po toliko mnogo osnova, da će objašnjenje šta je loše biti mnogo duže od samog programa.
Nemoj ovo da shvatiš kao napad na tvoju ličnost, nadam se da ćeš iz ovoga nešto da naučiš
Da krenem redom:
Code:
ind2 = ind + int(pomeranje)
je bezveze, jer u svakom prolazu kroz petlju ponovo radiš konvertovanje u int. Umesto toga, dovoljno je da to uradiš jednom, pre petlje
Code:
pomeranje = int(input('Za koliko mesta pomeriti slova? '))
Code:
else:
ind2 = ind2
je besmisleno, uopšte ti ne treba taj else. if može da bude i bez else dela
Code:
ind = abc.index(i)
ind2 = ind + int(pomeranje)
if ind2 > 26:
ind2 = ind2 - 30
else:
ind2 = ind2
slovo = abc[ind2]
print(slovo, end='')
je višestruko loše. Bezveze koristiš varijable ind, ind2 slovo. Koristiš ono što se zove "magični brojevi". Imaš 26 i 30, a na oba mesta treba da bude 30. Python oprašta greške i dozvoljava negativne vrednoste indeksa, ali samo pukim slučajem program radi.
Code:
else:
i == i
slovo = i
print(slovo, end='')
Uh, "i==i" - ZAŠTO TO PIŠEŠ??? čak i da si hteo da napišeš i=i to ti ne treba. Zar nije jednostavnije da samo staviš print(i, end='')
Evo tvog programa, bez ulaženja u ispravku logike, koji radi isto što i tvoj kod, samo malo ispravnije:
Code:
# Cezarova šifra
poruka = input('Unesi poruku: ')
pomeranje = int(input('Za koliko mesta pomeriti slova? '))
abc = 'abcčćdđefghijklmnoprsštuvzž'
n=len(abc)
for i in poruka:
if i in abc:
print(abc[(abc.index(i)+pomeranje) % n], end='')
else:
print(i, end='')
Problem sa slovima lj, nj i dž je REŠEN. Tretiraju se kao dva slova.
Uzmi reči nadživeti, konjunkcija, injekcija. Ovo su slučajevi kada znaci dž i nj predstavljaju DVA slova. Ne mogu da se setim primera da je nekada i lj dva slova.
Sada još samo da rešiš problem velikih slova, pa si rešio zadatak...