鱼C论坛

 找回密码
 立即注册
查看: 1691|回复: 3

[已解决]关于课后作业34的一道问题

[复制链接]
发表于 2022-7-12 17:18:49 | 显示全部楼层 |阅读模式
3鱼币


这一题中第二个注意要点 :用户输入的字符串中,单词之间可能不止一个空格,但是反转后的结果将统一使用一个空格作为单词之间的间隔(例如输入字符串是 "I   love        FishC.",结果依然输出 "FishC. love I")
我想到先用split()方法将字符串变成一个列表,然后循环语句用remove方法删去空格,最后再翻转输出
代码就是:
a=' i   love   fishc  '
b=a.split(' ')
for i in range(len(b)):
    if b == '':
        b.remove(b)
但是空格删除不干净,于是想加一句 i=0,让每一次删除一个空格后都从头再次遍历一遍,这样应该能彻底删除空格
但是程序报错了 2.png
想问一下大家问什么会这样呢。
最佳答案
2022-7-12 17:18:50
本帖最后由 临时号 于 2022-7-12 18:01 编辑

还是拿"I   love        FishC."来举例
因为b=a.split(' '),所以len(b)的结果应该是12
所以range(len(b))它产生的序列其实是(0,1,2,3,4,5,6,7,8,9,10,11)
也就是说i最多可以取到11
但b中有9个'',所以在if语句中都会被删掉,所以b到最后的最大下标根本没有11,但i会取道11,所以报了下标越界
解决的方法是在if中先别直接删掉'',而是记录''的个数,之后再删''
参考代码:
  1. a=input()
  2. b=a.split(' ')
  3. count = 0
  4. for i in range(len(b)):
  5.     if b[i] == '':
  6.         count += 1

  7. while count != 0:
  8.     b.remove('')
  9.     count -= 1

  10. b.reverse()
  11. for i in range(len(b)):
  12.     print(b[i],end=" ")
  13. print()
复制代码
QQ截图20220712170506.png

最佳答案

查看完整内容

还是拿"I love FishC."来举例 因为b=a.split(' '),所以len(b)的结果应该是12 所以range(len(b))它产生的序列其实是(0,1,2,3,4,5,6,7,8,9,10,11) 也就是说i最多可以取到11 但b中有9个'',所以在if语句中都会被删掉,所以b到最后的最大下标根本没有11,但i会取道11,所以报了下标越界 解决的方法是在if中先别直接删掉'',而是记录''的个数,之后再删'' 参考代码:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-12 17:18:50 | 显示全部楼层    本楼为最佳答案   
本帖最后由 临时号 于 2022-7-12 18:01 编辑

还是拿"I   love        FishC."来举例
因为b=a.split(' '),所以len(b)的结果应该是12
所以range(len(b))它产生的序列其实是(0,1,2,3,4,5,6,7,8,9,10,11)
也就是说i最多可以取到11
但b中有9个'',所以在if语句中都会被删掉,所以b到最后的最大下标根本没有11,但i会取道11,所以报了下标越界
解决的方法是在if中先别直接删掉'',而是记录''的个数,之后再删''
参考代码:
  1. a=input()
  2. b=a.split(' ')
  3. count = 0
  4. for i in range(len(b)):
  5.     if b[i] == '':
  6.         count += 1

  7. while count != 0:
  8.     b.remove('')
  9.     count -= 1

  10. b.reverse()
  11. for i in range(len(b)):
  12.     print(b[i],end=" ")
  13. print()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-12 18:20:55 | 显示全部楼层
临时号 发表于 2022-7-12 17:47
还是拿"I   love        FishC."来举例
因为b=a.split(' '),所以len(b)的结果应该是12
所以range(len(b)) ...

!这样
我还以为i也会随着len(b)的变化而变化呢原来一开始就确定好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-12 18:30:29 | 显示全部楼层
咕咕鸭 发表于 2022-7-12 18:20
!这样
我还以为i也会随着len(b)的变化而变化呢原来一开始就确定好了

当然是刚开始就确定好的啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-30 23:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表