【问题标题】:TypeError: string indices must be integers, not str 4TypeError:字符串索引必须是整数,而不是 str 4
【发布时间】:2013-10-15 02:21:02
【问题描述】:

我正在尝试编写一个代码,它只是在给定的任何单词的每个辅音前面加上一个“o”,我不知道从哪里开始,我只是收到错误 "TypeError: string indices must be integers, not str"

k = list('b' + 'c' + 'd' + 'f' + 'g' + 'h' + 'j' + 'k' + 'l' + 'm' + 'n' + 'p' + 'q' + 'r' + 's' + 't' + 'v' + 'w' + 'x' + 'z')
for bok in k:
    text = list(raw_input("Give a phrase to code: "))
    print bok["0"]

【问题讨论】:

  • 您可以逐个字符地遍历字符串; k='bcd...z' 就足够了(出于同样的原因,k=list('bcd...z') 如果您真的想要一个包含 25 个单字符字符串的列表,则可以使用)。

标签: python string int


【解决方案1】:

您正在使用print bok["0"],使用字符串“0”作为索引。你需要使用一个整数,所以像这样替换:

  print bok[0]

我不确定我是否了解您在这里的总体目标,但这将解决您发布此问题所针对的错误。

【讨论】:

    【解决方案2】:

    首先,数组索引是用整数而不是字符串完成的:

    >>> a = [1, 2, 3]
    >>> a["0"]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: list indices must be integers, not str
    >>> a[0]
    1
    

    其次,你可以不用那么多+es来做一个字符串:

    >>> 'b' + 'c' + 'd'
    'bcd'
    >>> 'bcd'
    'bcd'
    

    第三,你可以遍历一个字符串,而不必把它变成一个列表:

    >>> for c in list("abc"):
    ...     print c
    ... 
    a
    b    
    c
    >>> for c in "abc":
    ...     print c
    ... 
    a
    b        
    c
    

    第四,遍历一个字符串会为您提供一个包含每个字符的字符串。您不必获取该字符串的第 0 个索引 - 这是同一件事:

    >>> "b"
    'b'
    >>> "b"[0]
    'b'
    >>> "b"[0] == "b"
    True
    

    【讨论】:

      【解决方案3】:

      更简单的方法是使用正则表达式,例如:

      import re
      
      print re.sub('([bcdfghjklmnpqrstvwxyz])', r'o\1', 'tobias')
      # otoobiaos
      

      这会查找[](辅音)之间的任何中间部分,并将其替换为o,后跟它找到的字母。

      例如,获取用户输入:

      word = raw_input('Enter a word: ')
      print re.sub('([bcdfghjklmnpqrstvwxyz])', r'o\1', word)
      

      【讨论】:

      • 这当然解决了我的问题!但是,如果我希望用户能够写出他/她想要的任何单词,所以这个单词在每个辅音前面都有一个“o”,比如“otoobiaos”,我该怎么做?我知道我至少必须使用 raw_input。
      • @Tobias yup - 提示使用 word = raw_input('Enter word: ') 之类的东西并将 word 而不是文字 'tobias' 传递给函数
      • 谢谢!这帮助很大!
      • 只是另一个问题,如果我想让“o”出现在辅音之后,我该怎么做?我仍然使用相同的功能吗?
      • @Tobias 是的...\1 代表找到的字符...o 只是一个字面意思...我留给您将其余部分放在一起:)
      猜你喜欢
      • 2013-12-16
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2017-08-06
      相关资源
      最近更新 更多