Python3 For-Loop和If-Statement问题

时间:2018-02-16 13:36:58

标签: python for-loop if-statement

我刚写了一些代码,它应该遍历文件的每一行,并且如果该行的第一个单词之后的数字是1,则应该调用另一个函数。

文件如下所示:
Button0 1
Button1 0
动作0
订单0

我的代码:

currLog = open(log,"r") #Open current Log-File
    for line in currLog:    #Loop through each Line
        pos = line.split(" ")   #Split line into Name(pos0) and Answer(pos1)
        print(pos[1])
        if (pos[1] == "0"):
            print("Button0")

壳输出继电器:

1

0

0

0

Button0

就像你看到它只在最后一行输入if语句

已经感谢帮助了。

2 个答案:

答案 0 :(得分:1)

您需要考虑一个新的换行符。如果打印整个pos变量,您将看到以下输出:

['Button0', '1\n']
['Button1', '0\n']
['Motion', '0\n']
['Order', '0']

您的解决方案可能是考虑换行符(在拆分&#34之前将其删除;")或使用.split()字符串函数。使用不带分隔符的split()也会考虑连续的和尾随的空格字符。 Python docs解释得非常好。

  

str.split(sep = None,maxsplit = -1)返回中的单词列表   string,使用sep作为分隔符字符串。如果给出maxsplit,at   大多数maxsplit分裂已完成(因此,列表最多将有   maxsplit + 1个元素)。如果没有指定maxsplit或-1,那么那里   对分割数量没有限制(所有可能的分割都是如此)。

     

如果给出了sep,则连续的分隔符不会组合在一起   被视为划分空字符串(例如,' 1,,2' .split(',')   返回[' 1',''' 2'])。 sep参数可能包含多个   字符(例如,' 1<> 2<>' .split('<>')返回[' 1',&# 39; 2&#39 ;,   ' 3'])。返回使用指定分隔符拆分空字符串   ['&#39]。

     

例如:

     

' 1,2,3' .split(',')[' 1',' 2',&#39 ; 3']   ' 1,2,3' .split(',',maxsplit = 1)[' 1',' 2,3']   ' 1,2,,3,' .split(',')[' 1',' 2',' ;',' 3','']

     

如果未指定sep或为None,则应用不同的拆分算法:运行   连续的空格被视为单个分隔符,并且   如果字符串,结果将在开头或结尾不包含空字符串   有领先或尾随空格。因此,分裂空   字符串或仅由具有无分隔符的空格组成的字符串   返回[]。

     

例如:

     

' 1 2 3' .split()[' 1',' 2',' 3']   ' 1 2 3' .split(maxsplit = 1)[' 1',' 2 3']   ' 1 2 3' .split()[' 1',' 2',' 3']

答案 1 :(得分:0)

看起来它也是第二个字符串中的行尾字符。从输出看来它似乎是印刷" 1 \ n \ n"有效。 Python的print语句会自动添加一个返回值,因此它打印的字符串必须包含另一个。

我看到了两个简单的问题解决方案:

if (not int(pos[1]))

此选项将输入字符串解析为整数,并且Python解释任何不是' 0',' NULL'或""如果为假,我们可以将其反转并获得0的真值。

if (pos[1][0] == "0")

由于你的比较字符串在结尾处有返回字符,因此它不等于0.如果你只是抓住字符串的第一个字符,你应该只能得到" 0&#34 ;并能够按照你想要的方式进行比较。