2013-04-29 200 views
0

我是Python新手,正在爲我的學位學習最終項目。我想寫一個Python腳本,它將讀取數值(如:21,23,28等),並將其與腳本中的值進行比較。如果值匹配,它應該執行另一個python腳本。一切似乎都正常工作,但文件中的紅色值在條件匹配中不會改變。該腳本每次執行語句ELSE而不是IF,而條件是真的。從txt讀取數值。文件,並將其與條件進行比較Python

這裏是我的代碼:

import time 
import sys 
import os 


check_period = 2 
fo = open("/home/pi/thermometer1.txt", "r+") 
str = fo.readline(); 
fo.close() 


while True: 
    fo = open("/home/pi/thermometer1.txt", "r+") 
    str = fo.readline(); 
    if str < 25 : 
     os.system("python /home/pi/servo/servo1/servo6.py") 
     print str 
     fo.close() 
    else: 
     os.system("python /home/pi/servo/servo1/servo1.py") 
     print str 
     fo.close() 
    time.sleep(check_period) 

還有一個問題是如何編輯此腳本,將比較一個.txt文件中包含的數值。 23到其他.txt文件的數值類似。 27如果滿足條件,則執行另一個python腳本(類似於上面的代碼)。預先感謝所有意見。

+1

你似乎有一個無限循環。這是打算嗎? – mgilson 2013-04-29 14:54:50

回答

0

從文本文件中讀取時,會得到字符串。與int相比較的字符串將始終評估爲False。取而代之的

str = fo.readline() 

存儲在str字符串類型,做

str = int(fo.readline()) 

,但被警告說,如果行包含不能爲int一個值,你會得到一個錯誤。另外,您不需要在代碼中的任何行之後放置分號,並且應該避免使用變量名str,因爲它是Python內置類型。

+0

謝謝,這使我的代碼正常工作! – user2332502 2013-04-30 11:38:52

2

從文件中讀取字符串,而不是整數。由於它們是不同的(不可比較的)類型,所以進行任何比較都會導致基於類型的一致但任意的值。顯然,字符串被認爲比整數大(對於Cpython-其他實現可能會有不同的表現)。

你需要構建一個整數出你的字符串,而不是:

int_from_str = int(fo.readline()) 

雖然我們在這,有很多更好的方法來遍歷文件:

with open("/home/pi/thermometer1.txt") as fin: 
    for line in fin: 
     int_from_str = int(fin) 
     ... 

在python3.x上,除==以外的任何比較都會引發異常。

+1

「由於它們是不同的(不可比較的)類型,因此您做的任何比較都會返回」False「。實際上,它會根據類型名稱的字母排序順序返回「True」或「False」:例如,由於「int」<「str」',因此'int'總是小於'str'。正如你所說,這種愚蠢在Python 3中消失了。 – kindall 2013-04-29 14:54:52

+0

@kindall - 對。我知道我忘記了一些東西。我已更新以更正它。感謝您指出了這一點。 – mgilson 2013-04-29 14:55:32

+0

@kindall對於沒有實現'tp_compare'的C類,這是真的。如果你在python中創建了一個新的類,那就不再是這樣了:'class c(object):def __lt __(self,other):return NotImplemented 5 < c() -> True''儘管'「int」>「c」'。在這種情況下,我相信CPython使用對象'id'來進行比較。 – Bakuriu 2013-04-29 15:01:35

相關問題