山西李逵 发表于 2021-11-13 10:26:27

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:56:26

本帖最后由 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(),这一轮字符的小写

山西李逵 发表于 2021-11-13 10:58:40

suchocolate 发表于 2021-11-13 10:56
1)但从列从角度考虑,空列表用index取值会报错。IndexError: list index out of range
2)
3) res[-1].l ...

res[-1].lower(),上一轮的字符的小写

这个是什么意思呢,就没有给 res赋值啊

suchocolate 发表于 2021-11-13 11:02:48

山西李逵 发表于 2021-11-13 10:58
res[-1].lower(),上一轮的字符的小写

这个是什么意思呢,就没有给 res赋值啊

第一轮res空,and后面不会继续计算,直接进入else, else下面有 res.append(each),就会给res添加本轮字符。进入下一轮,res的[-1]就变成了上一轮的字符了。

suchocolate 发表于 2021-11-13 11:04:26

山西李逵 发表于 2021-11-13 10:58
res[-1].lower(),上一轮的字符的小写

这个是什么意思呢,就没有给 res赋值啊

建议你用pycharm,设置断点,debug 一步一步看,每次到哪,变量变成什么,都能看清楚,看一遍就都懂了。

山西李逵 发表于 2021-11-13 11:19:12

suchocolate 发表于 2021-11-13 11:04
建议你用pycharm,设置断点,debug 一步一步看,每次到哪,变量变成什么,都能看清楚,看一遍就都懂了。

我还在学习 用的idle

suchocolate 发表于 2021-11-13 12:00:23

山西李逵 发表于 2021-11-13 11:19
我还在学习 用的idle

初学也可以用pycharm

jujujujuju0 发表于 2021-11-15 16:07:44

suchocolate 发表于 2021-11-13 11:04
建议你用pycharm,设置断点,debug 一步一步看,每次到哪,变量变成什么,都能看清楚,看一遍就都懂了。

pycharm 怎么看debug

suchocolate 发表于 2021-11-15 16:08:47

jujujujuju0 发表于 2021-11-15 16:07
pycharm 怎么看debug

https://www.cnblogs.com/wang-mengmeng/p/11409412.html
页: [1]
查看完整版本: 27讲课后作业