消息加密:添加随机字符功能的代码异常问题求助
消息加密功能的问题分析与修复
问题原因拆解
所有间隔都是同一个随机字符
你的ranchar()函数逻辑错误:for循环第一次迭代就执行return ok,导致函数永远只返回单个随机字符。而str.join()会把这个字符作为统一分隔符插入所有字符之间,所以所有间隔都是同一个字符。未去除空格
代码完全没有处理输入中的空格,直接使用原始输入phrase,空格会被保留并参与后续拼接。间隔长度固定为1
一方面,ranchar()只返回单个字符,所以间隔长度固定是1;另一方面,函数仅被调用一次,生成的分隔符不会变化。此外,你生成的随机数y根本没发挥作用——因为循环第一次就return了,y的取值对结果毫无影响。
修复后的代码
import random chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' def generate_random_seq(length): # 生成指定长度的随机字符序列 return ''.join(random.choice(chars) for _ in range(length)) # 处理输入:移除所有空格 phrase = input('请输入要加密的消息: ').replace(' ', '') # 生成2到20之间的随机长度(包含2和20) x = random.randint(2, 20) # 拼接加密内容:每个字符后追加随机序列,最后移除末尾多余的序列 encrypted = [] for char in phrase: encrypted.append(char) encrypted.append(generate_random_seq(x)) encrypted = ''.join(encrypted[:-1]) print(encrypted)
修复说明
- 新增
generate_random_seq()函数,根据传入的长度生成对应长度的随机字符序列,避免仅返回单个字符 - 用
replace(' ', '')移除输入中的空格(若需过滤更多空白字符,可改用''.join(c for c in phrase if not c.isspace())) - 用
random.randint(2,20)生成符合需求的随机长度x(包含2和20两个边界值) - 通过循环为每个字符添加独立的随机序列,最后移除末尾多余的序列,确保仅在字符之间插入间隔
内容的提问来源于stack exchange,提问作者veryconfused
相关产品推荐
相关产品推荐

