我的代码的目的是删除介于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
答案 0 :(得分:2)
我认为这行代码:
if num == 2:
应该测试num2
,而不是num
。
答案 1 :(得分:0)
我提出了一些关于你的代码的建议,与@JohnGordon在他的回答中指出的错误分开。
不要调用字符串input
- input
是Python 2和Python 3中内置函数的名称。
当您只想要列表的i
元素时,您不需要使用切片。您可以使用my_list[i:i+1]
my_list[i]
请参阅@John Gordon关于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