2015-10-30 18 views
1

我的代码的目的是从控制-c(ASCII值为3)和control-b(ASCII值为2)之间的文件中删除所有文本。我的代码输入第一个if语句,当它看到3的值但从未看到2并且它应该。循环重复直到文件结束。我听说python有ASCII的问题,但无法弄清楚为什么没有看到2。Python - 不识别Ascii char值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 
+1

请张贴一个完整的程序。你的代码没有定义'size','input'和'fresult'。也请张贴示范问题的示例输入。 –

+0

如果首先检测到\ 003,此代码仅检测ASCII \ 002。并且还有比较num而不是num2的错字。接得好。 – Erik

回答

2

我觉得这行代码:

if num == 2: 

应该测试num2,不num

0

我会就你的代码提出几条建议,与错误@JohnGordon分开,并在他的答案中指出。

  1. 不要叫你的字符串input - input在两个Python 2和Python 3的

  2. 内置函数的名称时,你只想一个列表的i个元素,你不需要使用切片。取而代之的my_list[i:i+1],你可以用my_list[i]

  3. 见@约翰·戈登的回答if num == 2 - 你是在比较错误的变量(这是死代码,因为NUM不能同时担任两2和3)。

下面是我根据你已有的测试代码。

test_str = 'abc\x03def\x02ghi' 
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