2015-10-30 16 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