我有一個任務使用我想要的任何語言構建一個兩遍彙編程序。我選擇了python。除了一個簡短的問題,它對我很好。比較Python中兩個字符串的邏輯錯誤
我使用.asm輸入文件構建了一個符號表。然後我使用符號表來創建目標代碼。我下面的代碼給出:
import re,os
import ast
fr=open("2input.asm","r")
fw=open("symbol.txt","r+")
objFile=open("symbol1.txt","w")
str2=fr.readline() #reads lines in file
temp=""
str1="" #used for splitting original string
var=""
var1=""
printstr=""
location=map(int, re.findall('\d+',str2)) #extracts location in the form of string and then converts it to integer
loc=location[0] #converts location from list form to integer form
for line in fr: #creates a symbol table
str2=line
loc=loc+1
if str2.find(":")!=-1:
str1=str2.split(":")
str1.append(str(loc))
print>>fw, str1
elif str2.find("DC")!=-1:
str1=str2.split("DC")
str1.append(str(loc))
print>>fw, str1
elif str2.find("DS")!=-1:
str1=str2.split("DS")
str1.append(str(loc))
print>>fw, str1
#symbol table created
fw.seek(0)
fr.seek(0)
for line in fr: #creates object file
str2=line
if str2.find("READ")!=-1:
str1=str2.split()
var=str1[1]
for line in fw:
var1=ast.literal_eval(line)
var2=var1[0]
if var==var2: #it never goes in this if even if the condition is true
printstr="rohit"
print>>objFile, printstr
fw.close()
在過去,如果條件我已經使用了AST庫一個字符串,它是在列表格式列表中的數據類型轉換。
控制永遠不會在最後如果,爲什麼會發生?控制如何進入if?即使兩個字符串相同,控件也不會進入if。爲什麼會發生?
「symbol.txt」文件包含一些行,所有行都以列表格式存儲。這些行由ast語句轉換爲列表數據類型。編輯:
我得到了問題。顯然,ast語句在將字符串轉換爲list dataype的同時添加了一些額外的空格,導致僞造if條件。我改變了if條件:
if var1 in var2:
#do my job
最有可能的情況是不正確的。打印出'var1'和'var2'的字符串表示形式和類型,看看是否有區別。 – viraptor
你知道你不需要聲明你的變量,對吧?在初始化一堆變量到''「'的開始,這部分是怎麼回事? – user2357112
@viraptor我已經試過你說的,這兩種類型都是字符串。 –