27讲课后作业
s = input("请输入一个字符串:")res = []
for each in s:
if res and res[-1].lower() == each.lower() and res[-1] != each:
res.pop()
else:
res.append(each)
for each in res:
print(each, end='')
这里的if 语句中 res是空的那res[-1]是什么呢
小甲鱼解析:这里比较难理解的应该是判断部分,它是先判断列表是否为空;如果不为空,则将列表中最后一个元素(即上一轮迭代放进去的字符)拿出来比对,大家都转换成小写,如果一样,那么说明它是同一个字母(此时可能是一个大写一个小写,两个都是大写,或者两个都是小写 3 种可能性);最后判断如果两者不相同,则说明是同一个字母的大小写。
判断列表为空是哪个? 上一轮迭代进入each中啊应该,和res没关系啊
最后这“最后判断如果两者不相同,则说明是同一个字母的大小写”都转换为小写字母了,哪应该两者相同为一个字母的大小写吧???
求助 蒙了 本帖最后由 suchocolate 于 2021-11-13 10:58 编辑
1)单从列表从角度考虑,空列表用index取值会报错。IndexError: list index out of range
2)判断列表为空ls = []
if ls:# 当列表不空,if结果为True,进入if
print('不空')
else:# 当列表为空,if结果为False,进入else
print('空')
3) res[-1].lower(),上一轮的字符的小写
4)each.lower(),这一轮字符的小写
suchocolate 发表于 2021-11-13 10:56
1)但从列从角度考虑,空列表用index取值会报错。IndexError: list index out of range
2)
3) res[-1].l ...
res[-1].lower(),上一轮的字符的小写
这个是什么意思呢,就没有给 res赋值啊 山西李逵 发表于 2021-11-13 10:58
res[-1].lower(),上一轮的字符的小写
这个是什么意思呢,就没有给 res赋值啊
第一轮res空,and后面不会继续计算,直接进入else, else下面有 res.append(each),就会给res添加本轮字符。进入下一轮,res的[-1]就变成了上一轮的字符了。 山西李逵 发表于 2021-11-13 10:58
res[-1].lower(),上一轮的字符的小写
这个是什么意思呢,就没有给 res赋值啊
建议你用pycharm,设置断点,debug 一步一步看,每次到哪,变量变成什么,都能看清楚,看一遍就都懂了。 suchocolate 发表于 2021-11-13 11:04
建议你用pycharm,设置断点,debug 一步一步看,每次到哪,变量变成什么,都能看清楚,看一遍就都懂了。
我还在学习 用的idle 山西李逵 发表于 2021-11-13 11:19
我还在学习 用的idle
初学也可以用pycharm suchocolate 发表于 2021-11-13 11:04
建议你用pycharm,设置断点,debug 一步一步看,每次到哪,变量变成什么,都能看清楚,看一遍就都懂了。
pycharm 怎么看debug jujujujuju0 发表于 2021-11-15 16:07
pycharm 怎么看debug
https://www.cnblogs.com/wang-mengmeng/p/11409412.html
页:
[1]