Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TypeError:列表索引必须是整数,而不是str(在我的代码中,是Python)_Python_Python 2.7_Python 3.x - Fatal编程技术网

TypeError:列表索引必须是整数,而不是str(在我的代码中,是Python)

TypeError:列表索引必须是整数,而不是str(在我的代码中,是Python),python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,请帮帮我,如果我在列表“a”或“b”或“c”中,那么我将是“bg”。首先,你要求输入,生成一个字符串。然后在vvod:vvod_a.appendi中为i执行操作。若要将此字符串转换为1个字符的字符串列表以供将来参考,可以使用vvod_a=listvvod执行此操作。这就产生了一个列表:[f',e',f',s',f',f',a',a',f',a',e']。然后尝试用if i='a'或'b'或'c'修改其中一些,但这相当于if i=='a'或'b'或'c',并且由于非空字符串是真实的,因此得到的条件

请帮帮我,如果我在列表“a”或“b”或“c”中,那么我将是“bg”。

首先,你要求输入,生成一个字符串。然后在vvod:vvod_a.appendi中为i执行操作。若要将此字符串转换为1个字符的字符串列表以供将来参考,可以使用vvod_a=listvvod执行此操作。这就产生了一个列表:[f',e',f',s',f',f',a',a',f',a',e']。然后尝试用if i='a'或'b'或'c'修改其中一些,但这相当于if i=='a'或'b'或'c',并且由于非空字符串是真实的,因此得到的条件总是真实的

然后我们进入实际问题:vvod_a[i]=“bg”。您正在迭代列表中的实际元素,而不是其索引。i是一个字符串,而不是可用于列表索引的整数

我建议进行以下最小改动:

vvod = input('Input: ')
vvod_a = []
for i in vvod:
    vvod_a.append(i)
print (vvod_a)
for i in vvod_a:
    if i == 'a' or 'b' or 'c':
        vvod_a[i] = 'bg'

print (vvod_a)

Traceback (most recent call last):
['f', 'e', 'f', 's', 'f', 'f', 'a', 'a', 'f', 'a', 'e']
  File "/home/n4/Рабочий Влад/PYTHON/coding", line 8, in <module>
    vvod_a[i] = 'bg'
TypeError: list indices must be integers, not str
如果要收紧代码,可以在列表中使用字典和get方法:

vvod = input('Input: ')
vvod_a = []
for i in vvod:
    vvod_a.append(i)

print (vvod_a)
for i in range(len(vvod_a)):
    if vvod_a[i] in 'abc':
        vvod_a[i] = 'bg'

print (vvod_a)

正如TigerhawkT3所指出的,代码中的两个主要问题是,在for循环中,您使用列表的实际元素作为第8行中的索引vvod_a[i],而第7行中的if条件无法将条件左侧的表达式与右侧的每个元素进行比较。作为替代解决方案,我建议使用enumerate:

vvod = input('Input: ')
change_map = {'a':'bg', 'b':'bg', 'c':'bg'}
vvod_a = [change_map.get(item, item) for item in vvod]
print(vvod_a)
vvod = input('Input: ')
vvod_a = []
for i in vvod:
     vvod_a.append(i)
print (vvod_a)
for index, i in enumerate(vvod_a):
    if i == 'a' or i == 'b' or i == 'c':
        print(i)
        vvod_a[index] = 'bg'
        print(vvod_a)

print (vvod_a)