繁体   English   中英

比较Python中两个字符串的逻辑错误

[英]Logical error in comparing two strings in 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()

在最后一个if条件中,我使用ast库将列表格式的字符串转换为list数据类型。
控制永远不会进入最后一次,为什么会发生这种情况? 怎么控制进入if? 即使两个字符串都相同,控件也不会进入if。 为什么会这样?

“symbol.txt”文件包含一些行,所有这些行都以列表格式存储。 这些行由ast语句转换为list数据类型。

编辑:
我遇到了问题。 显然,ast语句在将字符串转换为list dataype时添加了一些额外的空格,导致伪造if条件。 我改变了if条件:

if var1 in var2:
  #do my job

如果条件为真,那么if语句中的代码绝对会执行。 你可以肯定这一点。 因此,条件根本不应该是真实的。 如果不确切知道您的数据是什么样子,就无法确切知道。 很可能这些值看起来相同,但它们根本不可能。

因此,从价值不相等的前提开始,回答“如果它们不相等,为什么它们不相等?”的问题。 例如,您可以打印出每个变量的类型,每个变量的长度,或者您可以编写一个小函数,一次比较一个字节,以查看哪个不同。 可能是视觉上看不到的隐形字符(可能是前导或尾随空格,或者可能是回车等控制字符),或者是非常相似的可见字符(例如数字1和小写字母) L,或大写字母O(oh)和数字0(零))。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM