首页 > 解决方案 > 这个怎么不破?

问题描述

我写了一些我必须提交给在线编程课程的代码。该代码旨在:

输出应该如下所示:

City of Beijing month ave: highest high is 30.9 Celsius  
City of Cairo month ave: highest high is 34.7 Celsius  
City of London month ave: highest high is 23.5 Celsius  
City of Nairobi month ave: highest high is 26.3 Celsius  
City of New York City month ave: highest high is 28.9 Celsius  
City of Sydney month ave: highest high is 26.5 Celsius  
City of Tokyo month ave: highest high is 30.8 Celsius  
City of Rio De Janeiro month ave: highest high is 30.0 Celsius  

当代码运行时,它进入一个无限循环,我不明白为什么。我认为当文件指针到达文件末尾时,代码会中断,因为读取将等于“”(空字符串),这是 Falsey,所以它会停止。

我知道最好在没有关键字“while”的情况下编写代码,但在我的课程中,该关键字必须在代码中。我让代码与 for/in 关键字完美配合。

任何帮助是极大的赞赏。

编码:

!curl https://raw.githubusercontent.com/MicrosoftLearning/intropython/master/world_temp_mean.csv -o mean_temp.txt

mean_temp_file = open("mean_temp.txt","a+")
mean_temp_file.write("Rio de Janeiro,Brazil,30.0,18.0\n")


mean_temp_file.seek(0)

headings = mean_temp_file.readline()

headings_list = headings.split(",")

city_temp = mean_temp_file.readlines()

while city_temp: 
    for each_line in city_temp:
        each_line_list = each_line.split(",")
        print(headings_list[0].title(),"of",each_line_list[0].title(),headings_list[2],"is",each_line_list[2],"Celsius.")

mean_temp_file.close()

如果有帮助,我会在 Microsoft Azure Notebooks 中编写代码。

标签: python

解决方案


您已创建city_temp文件中所有行(但第一行)的列表:

city_temp = mean_temp_file.readlines()

您永远不会在循环内的任何地方修改该列表。因此,如果它第一次是非空的(因此是真实的),它将一次又一次地永远是非空的。

目前尚不清楚您实际上想对该循环做什么。您已经有一个遍历文件中每一行的内部循环:

for each_line in city_temp:

…这似乎是您需要的唯一循环。所以,只需摆脱外while循环。:

city_temp = mean_temp_file.readlines()

for each_line in city_temp:
    each_line_list = each_line.split(",")
    print(headings_list[0].title(),"of",each_line_list[0].title(),headings_list[2],"is",each_line_list[2],"Celsius.")

当我们在它的时候,你不需要readlines()在这里。这会将所有剩余的行读入一个列表,以便您可以循环遍历它——但文件本身是相同行的迭代器,因此您也可以循环遍历它,而不会浪费时间、内存和一行列出清单的代码:

for each_line in mean_temp_file:
    each_line_list = each_line.split(",")
    print(headings_list[0].title(),"of",each_line_list[0].title(),headings_list[2],"is",each_line_list[2],"Celsius.")

最后,使用该csv模块可能会更容易:

import csv
mean_temp_file = open("mean_temp.txt","a+")
mean_temp_file.write("Rio de Janeiro,Brazil,30.0,18.0\n")
mean_temp_file.seek(0)
for row in csv.DictReader(mean_temp_file):
    # here row is a dict, where the keys are the header names, 
    # and the values are this row's values

推荐阅读