Khayal 发表于 2022-10-8 15:09:51

027课后作业

请按照以下规则整理一个给定的字符串
一个整理好的字符串中,两个相邻字符 s 和 s,其中 0 <= j <= s.length - 2,要满足如下条件:
若 s 是小写字符,则 s 不可以是相同的大写字符
若 s 是大写字符,则 s 不可以是相同的小写字符
如果 s 和 s 满足以上两个条件,则将它们一并删除

我写出来的如下:
strr=input('input a string:')

list = []
for i in strr:
    if list[-1].lower()==i and list[-1] != i:
      list.pop()
    elif i ==list[-1].upper() and i != list[-1]:
      list.pop()
    else:
      list.append(i)
for i in list:
    print(i,end='')

报错, list index out of range

与答案对比,发现line 5 和 line 7 应改为 if list and list[-1]==……

求助大神,为什么要加上list and



67193114 发表于 2022-10-8 15:09:52


没看具体题目,从代码来说存在两个问题:
1. list为关键字不要当做变量名
2. 先要保证list列表不为空(and的意义)

丶激情小王子 发表于 2022-10-8 15:17:52

list这个列表不能为空,因为 if语句内 有list.pop(),如果不判断直接弹出 list 列表已经为空了就会报错,还有就是楼上说的 list是关键字,最好不要当作变量名{:10_256:}

丶激情小王子 发表于 2022-10-8 15:18:49

丶激情小王子 发表于 2022-10-8 15:17
list这个列表不能为空,因为 if语句内 有list.pop(),如果不判断直接弹出 list 列表已经为空了就会报错,还 ...

你可以自己测试一下,当list是一个空列表的时候(list = [] )   用bool(list) 返回值是False

jackz007 发表于 2022-10-8 17:37:39

本帖最后由 jackz007 于 2022-10-8 17:39 编辑

      试试这个代码
strr = input('input a string : ') . strip()
s , i = '' , 1
while i < len(strr):
    if strr . swapcase() == strr:
      i += 1
    else:
      s += strr if i < len(strr) - 1 else strr
    i += 1
print(s)

Khayal 发表于 2022-10-8 19:50:22

67193114 发表于 2022-10-8 15:09
没看具体题目,从代码来说存在两个问题:
1. list为关键字不要当做变量名
2. 先要保证list列表不为空( ...

哦哦,原来and是干这个的

Khayal 发表于 2022-10-8 19:51:44

丶激情小王子 发表于 2022-10-8 15:17
list这个列表不能为空,因为 if语句内 有list.pop(),如果不判断直接弹出 list 列表已经为空了就会报错,还 ...

感谢提醒,要去复习一下列表了{:10_266:}

Khayal 发表于 2022-10-8 19:53:01

jackz007 发表于 2022-10-8 17:37
试试这个代码

一目了然,谢谢大佬
页: [1]
查看完整版本: 027课后作业