华南虎_丿 发表于 2022-8-12 11:48:42

为什么会出现这样的情况,怎么解决?

初始代码:
d =
words = "FCF FC CF"
word =
for j in range(len(d)+1):
    word = words+1:d]
print(word)
报错:
Traceback (most recent call last):
File "C:\Users\xsr29\Desktop\2.py", line 5, in <module>
    word = words+1:d]
IndexError: list index out of range

修改版本1:
d =
words = "FCF FC CF"
word =
for j in range(len(d)):
    word = words+1:d]
word[-1] = words+1:]
print(word)
返回:['', 'FC', 'CF']

修改版本2:
d =
words = "FCF FC CF"
word =
for j in range(len(d)-1):
    word = words+1:d]
word = words[:d]
word[-1] = words+1:]
print(word)
返回:['FCF', '', 'CF']

jackz007 发表于 2022-8-12 11:48:43

本帖最后由 jackz007 于 2022-8-13 11:07 编辑

words = "FCF FC CF"
word , s = [] , ''
for c in words:
    if c != ' ':
      s += c
    else:
      if s:
            word . append(s)
            s = ''
if s:
    word . append(s)
print(word)

words = "FCF FC CF"
word = words . split()
print(word)

sj185123 发表于 2022-8-12 16:40:08

初始代码:
长度问题,没有word
修改版本1:
len(d)=2,所以j是1和2,word[-1]就是word,所以并未给word赋值
修改版本2:
len(d)-1=1,所以j取1,只赋值了word也就是word,下面函数也只给word和word赋值,所以并未给word赋值
存在于for函数中的通篇问题:
d[-1]=d=6,所以在初始代码中长度正确也无法输出正确结果
修改方法1:不知道可不可以修改d,将d改为[-1 3 6 9]
d = [-1,3,6,9]
words = "FCF FC CF"
word =
for j in range(len(d)-1):
    word = words+1:d]
print(word)

修改方法2:如果要求d不能更改,在修改版本2上改
d =
words = "FCF FC CF"
word =
for j in range(len(d)):
    word = words+1:d]
word = words[:d]
word[-1] = words+1:]
print(word)
这么写其中第二个for函数没有什么意义,建议去掉改为:
d =
words = "FCF FC CF"
word =
word = words+1:d]
word = words[:d]
word[-1] = words+1:]
print(word)

华南虎_丿 发表于 2022-8-12 18:24:42

sj185123 发表于 2022-8-12 16:40
初始代码:
长度问题,没有word
修改版本1:


感谢回答{:10_275:}
补充点背景:
这段代码的目的是,将words中以空格分隔开的内容分别填入列表word中,列表d的含义其实就是words中空格的下标索引值。使用第二个for函数的原因是,words是通过输入获取,也就并不知道有多少个内容,在这里是直接赋值以简化流程。
在学习了下一期视频后,可以直接用split()函数实现,但我想知道不用这个方法,怎么实现目的。

tommyyu 发表于 2022-8-12 20:22:27

本帖最后由 tommyyu 于 2022-8-13 11:08 编辑

我感觉可以这样words = "FCF FC"
word = []
while words != '':
    try:
      word.append(words)
    except:
      word.append(words)
      break
    words = words
print(word)
就不需要d列表了

华南虎_丿 发表于 2022-8-14 09:21:07

tommyyu 发表于 2022-8-12 20:22
我感觉可以这样
就不需要d列表了

我还没学到try,except{:10_319:}

tommyyu 发表于 2022-8-14 09:23:36

本帖最后由 tommyyu 于 2022-8-14 10:51 编辑

华南虎_丿 发表于 2022-8-14 09:21
我还没学到try,except

这个也行
words = "FCF FC"
word = []
while words != '':
    if words.find(' ') != -1:
      word.append(words)
    else:
      word.append(words)
      break
    words = words
print(word)

华南虎_丿 发表于 2022-8-14 09:33:17

jackz007 发表于 2022-8-12 11:48


我还试了试其他的字符串,完全ok{:10_323:}
就是还有个问题,第7、10行的" if s:",为什么s是空字符串就不执行{:10_262:}

华南虎_丿 发表于 2022-8-14 09:37:03

tommyyu 发表于 2022-8-14 09:23
这个也行

这个切片很牛呀{:10_275:}
试了试其他字符串也可以,是一个好答案
页: [1]
查看完整版本: 为什么会出现这样的情况,怎么解决?