Python实现字符串首尾保留中间打乱功能时4位输入触发死循环问题
问题根因
- 全局列表
l没有在每次调用shufle函数时清空,每次调用都会往l末尾追加新的中间字符,循环次数越多l长度越长,导致拼接出来的s长度远超原字符串,永远无法跳出elif len(s)!=len(slovo): continue的判断,形成死循环 - 4字符输入时中间只有2个字符,有50%概率随机打乱后和原中间字符顺序一致,第一次触发
s==slovo进入下一轮循环,此时l长度从2变成4,后续拼接的字符串长度永远不对,直接卡死
修复方案
import random n=0 while n<4: slovo=input('请输入长度不小于4的字符串: ') n=len(slovo) def shufle(slovo): # 每次调用都生成新的中间字符列表,避免旧数据累积 l = [] for i in range(1, len(slovo)-1): l.append(slovo[i]) random.shuffle(l) return l while True: l = shufle(slovo) s = slovo[0] + ''.join(l) + slovo[-1] if s != slovo: print(s) break
优化说明
- 移除全局列表
l,改为shufle函数内部每次生成新的中间字符列表,从根源避免旧数据累积 - 简化遍历逻辑,跳过首尾的遍历可以直接用
range(1, len(slovo)-1)实现,不需要额外判断 - 用
str.join方法代替逐字符拼接,代码更简洁 - 移除冗余的长度判断,新实现中拼接出来的字符串长度必然和原字符串一致
内容的提问来源于stack exchange,提问作者Eidam
相关产品推荐
相关产品推荐

