while循环python的范围_While循环中的Python范围错误

首先,为什么你的代码不起作用:你没有保护你的内部循环不让它跑出来

“保存”子字符串时,索引将关闭

您+=到anslist,这不是向列表添加字符串的方式

在处理子字符串之后,shift不会递增,因此当它清除expan时,它会从相同的索引重新开始并永远循环

固定代码(内联注释解释更改):s="abckdefghacbde" #sample string

anslist=[] #stores answers

shift=0 #shifts substring

expan=0 #expands substring

while len(s) > 1+shift+expan: #within bounds of s

if s[0+shift+expan] > s[1+shift+expan]: #if not alphabetical

shift += 1 #moves substring over

else: #if alphabetical

# Added guard for end of string

while len(s) > 1 + shift + expan and # While still valid

s[0+shift+expan] <= s[1+shift+expan]:# While alphabetical

expan += 1 #checks next letter

# Fixed string sublength and append instead of +=

anslist.append(s[0+shift:1+shift+expan]) #adds substring to ans

# Continue to next possible substring

shift += expan # skip inner substrings

expan = 0

print anslist

结果:

^{pr2}$

所以最后一步是找出最长的那个,我留给你们,因为这看起来像是家庭作业。在

要回答这个问题:I see that adding to expan will put the index out of range, but shouldn't the largest while loop solve this?

它可以防止起始子字符串索引停止运行,但不能防止扩展。你必须防范这两种可能性。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值