【问题标题】:I'm practicing for/while loops. Ran into a string indexing error我正在练习 for/while 循环。遇到字符串索引错误
【发布时间】:2017-06-17 08:55:33
【问题描述】:
    def onlyLetters(seq):
        seq = seq.lower()
        letter = ('a', 'b', 'c', 'z')
        for i in range(len(seq)): 
             if seq[i] != letter: 
                  seq = seq[:i] + seq[i+1:]
        return seq

我正在尝试创建一个遍历字符串 seq 的所有元素的 for 循环,并检查它是否与元组字母匹配(稍后我将用字母表中的所有字母填充它)以及是否不匹配然后我将通过切出与元组不匹配的第 i 个元素来重新定义字符串 seq。我想要一个字符串,比如“你好,你好吗?”并在没有空格和标点符号的情况下返回它,并且像这样的小写字母'hellohowareyou'。但是,当我运行代码时,我在第 5 行收到错误“字符串索引超出范围”。请帮忙。

  onlyLetters(' K KKdf afd')
  ---------------------------------------------------------------------
  IndexError                          Traceback (most recent call last)
  <ipython-input-368-70e5521e7134>          in <module>()
  ----> 1 onlyLetters(' K KKdf afd')

  <ipython-input-367-fb538af71ff5> in onlyLetters(seq)
        3     letter = ('a', 'b', 'c', 'z')
        4     for i in range(len(seq)):
  ----> 5         if seq[i] != letter:
        6             seq = seq[:i] + seq[i+1:]
        7     return seq

       IndexError: string index out of range

【问题讨论】:

  • 这里有一个提示,当i 大于5 时,你认为会发生什么

标签: python for-loop indexing range


【解决方案1】:

这是因为您在循环遍历数组时正在修改该数组。这通常是个坏主意。我建议您在看到所需字母时将值复制到新数组中,而不是删除您不想要的字母然后返回新数组。

【讨论】:

  • 如何修改元组,您能详细说明一下吗?我想通过使用 if 语句,我只是在检查参数 seq 是否在第 i 个元素处有一个字母。如果没有,那么我将其切片,从而通过连接第 i 个元素之前和之后的 seq 来修改 seq 。这是错误的逻辑吗?
  • 你不是在修改元组,你是在修改字符串。
【解决方案2】:

您应该使用if seq not in letter 而不是if seq[i] !=letter,您将得到更正。

那么代码如下:

 def onlyLetters(seq):
        seq = seq.lower()
        letter = ('a', 'b', 'c', 'z')
        for i in range (len(seq)): 
            if seq not in letter:
                seq = seq[:i] + seq[i+1:]
        return seq

【讨论】:

  • 不幸的是,我仍然在同一行得到相同的 IndexError
  • 我刚才又试了一次,我想你应该没有任何错误。
  • 你在哪里尝试?
  • 在这个link尝试一次
猜你喜欢
  • 2015-07-12
  • 2015-12-16
  • 2022-01-22
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多