簡體   English   中英

Python3 For-Loop和If-Statement問題

[英]Python3 For-Loop and If-Statement trouble

我只是編寫了一些代碼,該代碼應該遍歷文件的每一行,並且如果該行的第一個單詞后面的數字為1,則應調用另一個函數。

該文件如下所示:
按鈕0 1
按鈕1 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語句

已經感謝您的幫助。

您有一個新的換行符,您需要考慮。 如果打印整個pos變量,將看到以下輸出:

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

您的解決方案要么是考慮換行符(在分割“”之前將其刪除),要么使用.split()字符串函數。 使用不帶分隔符的split()還將說明連續的和尾隨的空白字符。 Python文檔對此進行了很好的解釋。

str.split(sep = None,maxsplit = -1)返回字符串中的單詞列表,使用sep作為分隔符字符串。 如果指定了maxsplit,則最多完成maxsplit個分割(因此,列表最多包含maxsplit + 1個元素)。 如果未指定maxsplit或-1,則分割數沒有限制(進行所有可能的分割)。

如果給定sep,則不將連續的定界符分組在一起,而是將其視為定界空字符串(例如'1,,2'.split(',')返回['1','','2'])。 sep參數可以包含多個字符(例如,'1 <> 2 <> 3'.split('<>')返回['1','2','3'])。 使用指定的分隔符分割空字符串將返回['']。

例如:

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

如果未指定sep或為None,則將應用不同的拆分算法:連續的空白行將被視為單個分隔符,並且如果字符串的開頭或結尾處有空格,則結果在開頭或結尾將不包含空字符串。 因此,使用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 \\ n \\ n”。 Python的print語句會自動添加一個返回值,因此它正在打印的字符串必須包含另一個返回值。

我看到了兩個簡單的解決方案來解決您的問題:

if (not int(pos[1]))

此選項將輸入字符串解析為整數,並且Python將非'0','NULL'或“”解釋為false時,我們可以將其取反並獲得0的真值。

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

由於您要比較的字符串的末尾有返回字符,因此它不等於0。如果您只是抓住字符串的第一個字符,則應該只能得到“ 0”,並能夠以自己的方式進行比較想要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM