TypeError:字符串索引必须是函数中的整数

时间:2017-09-21 14:44:38

标签: python typeerror

我不确定我做错了什么。这是我的代码:

_CREAT

我想看到以下内容:

int fd = shm_open("/abc", O_RDWR | O_EXCL, 0777);

然而我得到了:

def divideEnTam(cadena, num):
  lista=[]
  for x in range (0, len(cadena)//num):
    lista.append(cadena[(x-num), x])
  print (lista)

divideEnTam("Paracaidas", 2)

我做错了什么?

3 个答案:

答案 0 :(得分:1)

字符串切片由:完成,而不是,

尝试以下方法:

def divideEnTam(cadena, num):
  lista=[]
  for x in range (0, len(cadena)//num):
    lista.append(cadena[(x-num):x])  # Fixed slicing
  print (lista)

divideEnTam("Paracaidas", 2)

答案 1 :(得分:1)

你必须以简单的方式做到这一点

def divideEnTam(cadena, num):
     return [cadena[i:i+num] for i in range(0, len(cadena), num)]

divideEnTam("Paracaidas", 2)

答案 2 :(得分:0)

你没有注意python告诉你什么。

当您运行程序时,您将获得追溯:

Traceback (most recent call last):
  File "so17405138.py", line 7, in <module>
    divideEnTam("Paracaidas", 2)
  File "so17405138.py", line 4, in divideEnTam
    lista.append(cadena[(x-num), x])
TypeError: string indices must be integers

回溯中的最后一行告诉您问题所在,即字符串索引必须是整数。然后,当您向上阅读时,您会发现问题出在第4行:

lista.append(cadena[(x-num), x])

如果你按照表达方式工作,你可以先尝试这样的事情:

>>> cadena = "Paracaidas"
>>> cadena[(4-3), 4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: string indices must be integers

会告诉你[]内部的内容有问题。你知道4-3和4的结果都是整数,所以接下来你可以尝试检查那个表达式是什么:

>>> x = (4-3), 4
>>> print(type(x), repr(x))
<class 'tuple'> (1, 4)
啊,哈哈!事实证明,(4-3), 4元组。如果您阅读了更多about tuples,您会发现它们实际上并未由括号定义,而是由逗号定义。您可能想要的是切片,您可以将,替换为:来获得。

但是,如果您尝试:

def divideEnTam(cadena, num):
  lista=[]
  for x in range (0, len(cadena)//num):
    lista.append(cadena[(x-num): x])
  print (lista)

divideEnTam("Paracaidas", 2)

你会发现自己出了问题:

['', '', 'Pa', 'ar', 'ra']

如果您暂时考虑一下,并将您的陈述调整为:

for x in range (0, len(cadena)//num):
    print(x-num, x)

您会看到此输出:

-2 0
-1 1
0 2
1 3
2 4

如果您发现这是从-2开始的。它不是您真正想要的输出。你想要更像这样的东西:

0 2
2 4
4 6
6 8
8 10

你知道如何使用range 吗?