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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:24:02