我的代码的目的是从位于control-c(ASCII值3)和control-b(ASCII值2)之间的文件中删除所有文本。当我的代码看到值3但从未看到值2并且应该看到值时,它会进入第一个if语句。循环只是重复,直到到达文件的末尾。我听说python有ASCII问题,但不明白为什么没有看到2。
代码:
i = 1
j=1
while i< size:
char1 = input[i:i+1]
num = ord(char1)
if num == 3:
for j in range (i,size):
char2 = input[j:j+1]
num2 = ord(char2)
if num == 2:
print "we found a 2"
i=j
else:
result=char1
fresult = fresult+result
i=i+1
print fresult
我认为这行代码:
if num == 2:
应该测试num2
而不是num
。
我会对您的代码提出一些建议,与@JohnGordon在他的回答中指出的错误分开。
-
不要调用字符串
input
-input
是Python 2和Python 3中内置函数的名称。 -
当您只想要列表的第5个CCD_元素时,不需要使用切片。您可以使用
my_list[i]
而不是my_list[i:i+1]
-
请参阅@John Gordon关于
if num == 2
的回答——您正在比较错误的变量(这是死代码,因为num永远不能同时为2和3)。
以下是我使用的基于您已有内容的测试代码。
test_str = 'abcx03defx02ghi'
i = 0
j = 0
size = len(test_str)
result = ''
while i < size:
char1 = test_str[i]
num1 = ord(char1)
if num1 == 3:
for j in xrange(i, size):
char2 = test_str[j]
num2 = ord(char2)
if num2 == 2:
print "we found a 2"
j += 1
break
i = j
else:
result += char1
i += 1
print result
哪个输出:
we found a 2
abcghi