Python - 不识别Ascii char值为2

时间:2015-10-30 03:37:42

标签: python ascii

我的代码的目的是删除介于control-c(ASCII值为3)和control-b(ASCII值为2)之间的文件中的所有文本。我的代码在看到值3时输入第一个if语句,但从未看到2,它应该。循环只是重复,直到到达文件末尾。我听说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

2 个答案:

答案 0 :(得分:2)

我认为这行代码:

if num == 2:

应该测试num2,而不是num

答案 1 :(得分:0)

我提出了一些关于你的代码的建议,与@JohnGordon在他的回答中指出的错误分开。

  1. 不要调用字符串input - input是Python 2和Python 3中内置函数的名称。

  2. 当您只想要列表的i元素时,您不需要使用切片。您可以使用my_list[i:i+1]

  3. 代替my_list[i]
  4. 请参阅@John Gordon关于if num == 2的回答 - 您正在比较错误的变量(这是死代码,因为num永远不会同时是2和3)。

  5. 这是我根据你已经拥有的测试代码。

    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