W sumie to ciężko wymienić wszystkie błędy. Ale jest jeden kluczowy:
def przygotowanie(tekst):
dlugosc=len(tekst)
for i in range(0, dlugosc):
if (ord(tekst[i])>=97 and ord(tekst[i])<=122):
print(tekst[i], end='')
elif (ord(tekst[i])>=65 and ord(tekst[i])<=90):
print(chr(ord(tekst[i])+32), end='')
else:
print(end='')
return tekst #< ===== MUSISZ zwrócić wartość którą przypisujesz na dole do zmiennej, inaczej funkcja zwróci None. A wartość None, nie ma długości którą próbujesz odczytać:
def cezar(tekst, przesuniecie):
dlugosc1=len(tekst) # < ========= Tutaj. Jako zmienna tekst przekazujesz None.
for i in range (0, dlugosc1):
print(chr(ord(tekst[i])+przesuniecie), end='')
tekst1=str(input("Wprowadz tekst: "))
tekst2=przygotowanie(tekst1) # < ==== Przez brak returna, tutaj właśnie przypisujesz None
x=int(input("Wprowadz wartosc przesuniecia (od 1 do 26): "))
cezar(tekst2, x) # < ========= A tu tego None przekazujesz do funkcji cezar.
Przy okazji, unikaj printów w funkcjach, lepiej je robić poza nimi chyba że debugujesz. Poza tym, nie zmieniasz elementów tekst[i] w funkcji przygotowanie. Tylko drukujesz na ekran po przesunięciu.
Aby zmienić dane to musisz zrobić deklarację typu:
tekst[i] = chr( ord( tekst[i] )+32 )
#Zwiększasz wartość ord'a, a następnie zamieniasz na char'a. (w sposób lekko naiwny w przypadku np. "Z")
#Ale chodzi tu głównie o to, aby go w stringu podmienić tak jak w powyższej logice (bo ten przykład nie zadziała, chodzi o zobrazowanie), chociaż można to zrobić lepiej, szybciej, generatorem i zrozumialej, niemniej prosiłeś by kod został czytelny.
#To błędy kluczowe dla działania.
Z tym że nie zmieniasz tu o wartość przesunięcia, ale o stałą wartość, co ci uniemożliwi rozczytanie bez wczytania słownika w danym języku i dobrej funkcji sprawdzającej :P.
Wybacz za krytykę, ale mam nadzieję że pomoże :). Jeśli będziesz potrzebował dalszej pomocy, to pisz śmiało, nie gryziemy, tylko chcemy wpoić dobre nawyki ;d
@Edit:
Wprowadz tekst: aZsG
azsg
Wprowadz wartosc przesuniecia (od 1 do 26): 1
bath
Kodem:
def cezar(tekst, przesuniecie):
tekst = list(tekst)
for i in range (len(tekst)):
temp = ord(tekst[i])
while temp+przesuniecie > 122:
temp = 96+(temp+przesuniecie-123)
tekst[i] = chr(temp+przesuniecie)
#~ print(chr(ord(tekst[i])+przesuniecie), end='')
tekst = "".join(i for i in tekst)
return tekst
tekst1="".join(str(input("Wprowadz tekst: "))).lower()
print(tekst1)
x=int(input("Wprowadz wartosc przesuniecia (od 1 do 26): "))
print( cezar(tekst1, x) )
Starałem się jak najmniej ingerować w twój kod, z wyjątkiem kilku kruczków. (jak "".join) powinno działać, spróbuj zrozumieć logikę programu i skorygować swoje błędy :).