You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python加密函数编写及get_offset无限循环与输入验证问题求助

修复get_offset函数并实现加密函数

一、搞定get_offset的两个核心问题

你的get_offset函数现在有两处明显的问题:

  1. 循环逻辑完全失效:当前代码里的while True只是个空架子,根本没做重复获取输入的操作,直接就return offset,等于循环白写了;
  2. 完全没做输入验证:既没检查用户输入的是不是有效整数,也没在输入超出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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:46:48