You need to carefully read your conditions:
Given a space, it ord(letter) + shiftwill store 32 + shiftin shifted(35 when shiftequal to 3). This is <65, so 26 is added, in this case it leads to 61, and the character with the number 61 appears =.
, , string.ascii_letters, , :
import string
...
for letter in text:
if letter not in string.ascii_letters:
cipher += letter
continue
...