Python加密函数编写及get_offset无限循环与输入验证问题求助
修复get_offset函数并实现加密函数
一、搞定get_offset的两个核心问题
你的get_offset函数现在有两处明显的问题:
- 循环逻辑完全失效:当前代码里的
while True只是个空架子,根本没做重复获取输入的操作,直接就return offset,等于循环白写了; - 完全没做输入验证:既没检查用户输入的是不是有效整数,也没在输入超出1-94范围时提示用户重新输入。
修复后的代码会一直缠着用户(不是),直到拿到合法的偏移值:
def get_offset(): while True: try: # 主动提示用户输入,再转成整数 value = int(input("请输入偏移值(1-94之间的整数):")) if 1 <= value <= 94: return value else: print("喂,偏移值得在1到94之间啊!再来一次!") except ValueError: print("别瞎输啊!得是整数才行!")
二、实现加密函数(以凯撒密码为例)
既然用到了偏移值,那做个凯撒密码加密函数最合适不过了,专门处理ASCII可打印字符(从空格 到波浪线~,刚好94个,完美匹配你的偏移范围):
def encrypt_text(text, offset): encrypted = "" for char in text: ascii_code = ord(char) # 只处理可打印的ASCII字符 if 32 <= ascii_code <= 126: # 计算加密后的ASCII码,超出范围就循环回来 new_ascii = 32 + (ascii_code - 32 + offset) % 94 encrypted += chr(new_ascii) else: # 非可打印字符直接原封不动保留 encrypted += char return encrypted
三、整合到你的代码里试试
把修复后的函数和加密函数拼到你的代码里,完整示例如下:
def display_details(): # 这里补你自己的display_details实现就行 return "你的个人信息内容" def get_menu_choice(): # 同理,补你自己的菜单选择逻辑 return "用户选的菜单选项" def get_offset(): while True: try: value = int(input("请输入偏移值(1-94之间的整数):")) if 1 <= value <= 94: return value else: print("错误:偏移值必须在1到94之间,请重新输入!") except ValueError: print("错误:请输入有效的整数!") def encrypt_text(text, offset): encrypted = "" for char in text: ascii_code = ord(char) if 32 <= ascii_code <= 126: new_ascii = 32 + (ascii_code - 32 + offset) % 94 encrypted += chr(new_ascii) else: encrypted += char return encrypted # 主程序跑起来 if __name__ == "__main__": my_details = display_details() get_choice = get_menu_choice() print(my_details) print(get_choice) # 获取合法偏移值 offset = get_offset() # 测试加密功能 original_text = "Hello, Stack Overflow! 123" encrypted_text = encrypt_text(original_text, offset) print(f"原始文本:{original_text}") print(f"加密后文本:{encrypted_text}")
几个关键说明
get_offset现在会死磕到用户输入合法值为止:处理了非整数输入的异常,也严格检查了范围;encrypt_text专注做加密一件事,接收明文和偏移值返回密文,符合单一职责原则;- 加密逻辑针对可打印字符循环,保证加密后还是能正常显示的字符,不会出现乱码。
内容的提问来源于stack exchange,提问作者Jay Sadat
相关产品推荐
相关产品推荐

