Python 尝试解决将字符串转换为列表中的整数时出现不同错误

Python 尝试解决将字符串转换为列表中的整数时出现不同错误,python,list,error-handling,xor,Python,List,Error Handling,Xor,我有以下列表和字符串: befcodes = ["A1","A2","A3","A4","A5","A6","A7","A8","A9","10","11","12","13","14","15",&

我有以下列表和字符串:

befcodes = ["A1","A2","A3","A4","A5","A6","A7","A8","A9","10","11","12","13","14","15","16","17","18","19","20"]
telegram = "$00;02;A1;00000000*49"
我的代码现在在字符串中更改
A1
20次,如下所示:

allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes) 
result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0])[1:18]))  
print (f'{result:08b}')
for x in allbefcodes:
    allbefcodes = (int(a) for a in allbefcodes)
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[x])[1:18]))  # "
    print (f'{result:08b}')
allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)    

for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0:])[1:18]))  # "(allbefcodes[0])" statt telegram
    print (f'{result:08b}')
allbefcodes = []
for i in befehlscodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)
   
for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in x[1:18])) 
输出以下列表:

['$00;02;A1;00000000*49', '$00;02;A2;00000000*49', '$00;02;A3;00000000*49', '$00;02;A4;00000000*49', '$00;02;A5;00000000*49', '$00;02;A6;00000000*49', '$00;02;A7;00000000*49', '$00;02;A8;00000000*49', '$00;02;A9;00000000*49', '$00;02;10;00000000*49', '$00;02;11;00000000*49', '$00;02;12;00000000*49', '$00;02;13;00000000*49', '$00;02;14;00000000*49', '$00;02;15;00000000*49', '$00;02;16;00000000*49', '$00;02;17;00000000*49', '$00;02;18;00000000*49', '$00;02;19;00000000*49', '$00;02;20;00000000*49']
现在我想使用XOR运算符来获得每个电报的二进制校验和(=每个
allbefcodes
)我这样做:

allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes) 
result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0])[1:18]))  
print (f'{result:08b}')
for x in allbefcodes:
    allbefcodes = (int(a) for a in allbefcodes)
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[x])[1:18]))  # "
    print (f'{result:08b}')
allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)    

for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0:])[1:18]))  # "(allbefcodes[0])" statt telegram
    print (f'{result:08b}')
allbefcodes = []
for i in befehlscodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)
   
for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in x[1:18])) 
对于
allbefcodes[0]
,这确实很好,我得到了输出
01001001
。但是我现在想用循环为所有
allbefcodes
的字符执行此操作,在循环中我会得到不同的错误。以下是我迄今为止尝试的:

for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[x])[1:18]))  
    print (f'{result:08b}')
错误
TypeError:列表索引必须是整数或片,而不是str
。我试着这样解决它:

allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes) 
result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0])[1:18]))  
print (f'{result:08b}')
for x in allbefcodes:
    allbefcodes = (int(a) for a in allbefcodes)
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[x])[1:18]))  # "
    print (f'{result:08b}')
allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)    

for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0:])[1:18]))  # "(allbefcodes[0])" statt telegram
    print (f'{result:08b}')
allbefcodes = []
for i in befehlscodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)
   
for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in x[1:18])) 
但是这里出现了错误
TypeError:“generator”对象不可下标。所以我下一步尝试了这个:

allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
allbefcodes = (int(a) for a in allbefcodes)     #Tried to solve it with this line
print (allbefcodes)    

for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[x])[1:18]))  # "(allbefcodes[0])" statt telegram
    print (f'{result:08b}')
但是现在错误
ValueError:int()的文本无效,以10为底:'$00;02;A1;00000000*49'
发生。对allbefcodes中的a执行
(float(int(a))
不会改变这一点。 我最后一次尝试是将
(allbefcodes[x])
更改为
(allbefcodes[0:])
,并将
allbefcodes=(int(a)表示a in-allbefcodes)
保留为out,如下所示:

allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes) 
result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0])[1:18]))  
print (f'{result:08b}')
for x in allbefcodes:
    allbefcodes = (int(a) for a in allbefcodes)
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[x])[1:18]))  # "
    print (f'{result:08b}')
allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)    

for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0:])[1:18]))  # "(allbefcodes[0])" statt telegram
    print (f'{result:08b}')
allbefcodes = []
for i in befehlscodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)
   
for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in x[1:18])) 
但是现在我得到了
TypeError:ord()应该是一个字符,但是找到了长度为21的字符串
,这让我再次需要整数而不是字符串,我已经试着解决了……我真的不知道该怎么做了,非常感谢您的帮助

我想出来了! 我只需将
(allbefcodes[0:])
替换为
x
,如下所示:

allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes) 
result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0])[1:18]))  
print (f'{result:08b}')
for x in allbefcodes:
    allbefcodes = (int(a) for a in allbefcodes)
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[x])[1:18]))  # "
    print (f'{result:08b}')
allbefcodes = []
for i in befcodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)    

for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in (allbefcodes[0:])[1:18]))  # "(allbefcodes[0])" statt telegram
    print (f'{result:08b}')
allbefcodes = []
for i in befehlscodes:
    dif_tele = telegram.replace("A1", i)
    allbefcodes.append(dif_tele)
print (allbefcodes)
   
for x in allbefcodes:
    result = functools.reduce(operator.xor,(ord(n) for n in x[1:18])) 

您发现的错误
TypeError:“generator”对象不可下标
,是因为您使用了由parantesses分隔的理解,从而创建了生成器。带有
TypeError:ord()的最后一行应为字符,但找到了长度为21的字符串
,因为您正在迭代一个列表,其中每个条目都是
allbefcodes
中的一个元素,该列表是长度为21的
字符串。