依赖于文件输入的If子句

2024-04-20 02:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能解释一下为什么在下面的代码中消息"Found an instance without object"没有和输出一起打印吗?你知道吗

filename= "S1-ADL1.dat"

with open(filename, 'r')as data:
 for line in data:            
    valueList=line.split(' ')   
    print "valueList[247]"+valueList[247]
    print "valueList[249]"+valueList[249]        
    if valueList[247] == '0'  and valueList[249] == '0':
            print "Found an instance without object"
            continue
    elif valueList[247]==0 and valueList[249]!=0:
        valueList[247]=valueList[249]
        valueList[246]=valueList[248]                        
print filename+' is written'

我得到的结果如下

valueList[247]0
valueList[249]0

valueList[247]0
valueList[249]0

valueList[247]0
valueList[249]0

S1-ADL1.dat is written

如您所见,有一些实例满足if语句,但它不打印if子句中的消息。你知道吗


Tags: instancean消息dataifobjectlinefilename
2条回答

同意BartoszKP的观点。你知道吗

split(' ')方法之前使用strip()方法。你知道吗

可以打印代码中的值列表和print "valueList:-" valueList输入的检查列表吗?所以你会更清楚。你知道吗

我测试了一些样本测试用例:

valueList:- ['q', '0', '0', '\n']
valueList[247]0
valueList[249]0
Found an instance without object
valueList:- ['q', '0', '0\n']
valueList[247]0
valueList[249]0

或者你可以写if condition如下:

if valueList[247][0] == '0' and valueList[249][0] == '0':

这是因为拆分的最后一个结果中隐藏了换行符。在你阅读的每一个line中都有这样的内容:'x y ... z\n',因此split的最后一个结果包含'z\n'(例如"0\n")。或者它碰巧是'\r'字符,或者其他一些空白字符。你知道吗

尝试使用^{}

valueList = line.strip().split(' ')

如果可能在输入的片段之间有多个其他空白字符,您可以尝试:

valueList = [v.strip() for v in line.split(' ')]

把它们从每一块上分开。你知道吗

另外,你的第二个条件是错误的。如果不将片段转换为int,则应继续使用字符串:

elif valueList[247]=='0' and valueList[249]!='0':      # note the apostrophes

相关问题 更多 >