文本文件中的最低和最高 - python 3

时间:2018-04-22 20:30:07

标签: python python-3.x

我是Python的新手,我的代码出现问题我在输出中打印的错误数据是我的日期,年份,最低温度和最高温度。我不确定我需要在代码中进行哪些更改才能从文本文件中打印正确的最低和最高温度。谢谢您的帮助。

以下代码的输出如下所示:

日:02/01
年份:2002年 最低温度是:8
日:02/06
年份:2008年 最高温度是:77

def main():


file = open ('open_File.txt', 'r')

lowest = 200
lowest_day = ""
lowest_year = ""
highest = 0
highest_day = ""
highest_year = ""



for line in file.read().splitlines():
        if line[0].isdigit():
            values = line.strip().split()
            low = (values[3])
            high = (values[1])

            for lowest in low:
                if low < lowest:
                    lowest = low
                    lowest_day = values[0]
                    lowest_year = values[2]



            for highest in high:
                if high > highest:
                    highest = high
                    highest_day = values[0]
                    highest_year = values[2]




print ("Day: ", (lowest_day))
print ("Year: ", (lowest_year))
print ("The lowest temperature is: ", (lowest))


print ("Day: ", (highest_day))
print ("Year: ", (highest_year))
print ("The highest temperature is: ", (highest))

main()的

这是我的文件的样子。 (我只在文本文件中包含了我需要的列)

Day     Max   Year   Min    
---------------------------------------
---------------------------------------
02/01   79   2002    8  
02/02   69   1989    5  
02/03   83   1989    7  
02/04   76   1957    3  
02/05   98   1890    0  
02/06   77   2008    9  

3 个答案:

答案 0 :(得分:0)

你走了。

file = open('text.txt', 'r')

lowest = 200
lowest_day = 0
lowest_year = 0
highest = 0
highest_day = 0
highest_year = 0


for line in file.read().splitlines():
    if line[0].isdigit():
        values = line.strip().split()
        low = int(values[3])
        high = int(values[1])

        if low < lowest:
            lowest = low
            lowest_day = values[0]
            lowest_year = values[2]

        if high > highest:
            highest = high
            highest_day = values[0]
            highest_year = values[2]

print ("Day: ", (lowest_day))
print ("Year: ", (lowest_year))
print ("The lowest temperature is: ", (lowest))


print ("Day: ", (highest_day))
print ("Year: ", (highest_year))
print ("The highest temperature is: ", (highest))

这给出了输出:

Day:  02/05
Year:  1890
The lowest temperature is:  0
Day:  02/05
Year:  1890
The highest temperature is:  98

有些注意事项:for lowest in low:没有意义,因为low只是一个字符,而不是列表或其他内容,所以我删除了它。另外,您将整数与字符串进行比较,因此我将字符串转换为整数。

答案 1 :(得分:0)

您的错误是因为您有两个名为最低的变量(两个名为最高的变量)。创建循环时

for lowest in low:

Python遍历&#34; low&#34;中的字符。并比较它们是否低于&#34;低&#34; (这没有任何意义)。变量&#34;最低&#34;已被for循环覆盖,因此程序会产生错误的结果。另外,为了找到最低温度,与最低值进行比较的数据必须是数字数据类型,而不是字符串类型。

要解决此问题,您应该取消&#34;以获得最低的低线&#34;,然后只需为每天的最低温度创建一个变量(例如lineLow)。该变量等于

int(values[3])

同样适用于较高温度。

(另外,不是file.read()。splitlines(),你可以使用file.readlines())

答案 2 :(得分:0)

如果你想要更加pythonic的方式,那么我认为以下代码也可能有所帮助。

file = open ('temp.txt', 'r')

myfunc1= lambda s: s[3]
myfunc2= lambda s: s[1]

lines = [line.strip().split() for line in file.read().splitlines() if line[0].isdigit()]

lowest= sorted(lines, key=myfunc1)[0]
highest = sorted(lines, key=myfunc2, reverse=True)[0]

print("lowestDAY: {0}, lowestYear: {1}, lowestTemp: {2}".format(lowest[0], lowest[2], lowest[3]))
print("highestDAY: {0}, highestYear: {1}, highestTemp: {2}".format(highest[0], highest[2], highest[1]))