2017-08-09 47 views
2

下午好!我对Python相对比较陌生 - 我正在为一个类进行作业。Python3 - 建议使用范围while循环?

此代码的目标是下载文件,向文件中添加一行数据,然后创建一个循环遍历每行数据,并打印出城市名称和最高平均温度该城市的数据。

我的代码如下 - 我有输出工作,没问题。我遇到的唯一问题是IndexError: list index out of range - 最后。

我已经在StackOverflow上进行了搜索 - 以及使用Python在线挖掘range()函数文档。我想我只需要适当地理解范围(),并且我会完成它。

如果我拿出范围,我得到同样的错误 - 所以我试图改变for/in为 - 在mean_temps城市: 其结果是,输出只显示7个城市中的4个 - 跳过其他所有城市。

任何意见将不胜感激! 这里是我的代码 - 下面的截图链接显示输出和错误,以及:

!curl https://raw.githubusercontent.com/MicrosoftLearning/intropython/master/world_temp_mean.csv -o mean_temp.txt 
mean_temps = open('mean_temp.txt', 'a+') 
mean_temps.write("Rio de Janeiro,Brazil,30.0,18.0") 
mean_temps.seek(0) 
headings = mean_temps.readline().split(',') 
print(headings) 

while mean_temps: 
    range(len(city_temp)) 
    for city in mean_temps: 
     city_temp = mean_temps.readline().split(',') 
     print(headings[0].capitalize(),"of", city_temp[0],headings[2], "is", city_temp[2], "Celsius") 

mean_temps.close() 

My code!

+3

欢迎来到这个网站!我很高兴你参加了这次巡演。你会看到[如何问问页面](https://stackoverflow.com/help/how-to-ask)然后[编辑你的问题](https://stackoverflow.com/posts/45597960/编辑)相应?例如,请将内容添加到源代码中,而不是添加到屏幕截图中。如果人们可以复制代码并自行尝试,他们更有可能帮助您。谢谢,祝你好运! – cxw

+0

好的,会做...谢谢! –

+0

除了抛出'NameError'之外,你还期望'range(len(city_temp))'做什么? –

回答

0

已经使用了while循环,当你真正想使用for循环。您在while循环中没有任何条件,因此它将评估为True,并且会永久运行。你应该在模式

for x in x: 
    do stuff 

使用for循环在你的情况,你会希望使用

for x in range(len(city_temp)): 
    for city in means_temp: 

编辑: 如果你必须使用一个while循环,你可以有变量,x ,这是由while循环递增。 while循环可以运行,而x小于range(len(city_temp))

一个基本的例子是

text = "hi" 
counter = 0 
while counter < 10: 
    print(text) 
    counter += 1 

编辑2: 也表示,他们希望你能走出while循环。如果您希望一个while循环永远运行,除非稍后满足条件,则可以使用break command来停止whilefor循环。

+0

感谢所有的反馈 - while循环是任务的要求,所以必须在那里。显然,这是为了确保我们理解如何摆脱垂头丧气,我相信......但这意味着我被画到了一个while循环的角落。我会尝试一些这些想法,看看我想出了什么 - 非常感谢! –

+0

好的,试图在while循环中添加一个中断 - 并且导致它跳过每一行其他数据。 txt文件总共有9行 - 一个标题行,然后是8行数据(在为Rio添加行数据的代码部分之后) - 所以输出应该有8个城市,并列出最高的平均温度。我也在等待教练的回应 - 但不明白是什么导致了这种行为让我想要一杯饮料!大声笑 –

0

我一直坚持这与索引错误。我原来的代码是:

city_temp = mean_temp.readline().strip(" \n").split(",") 

while city_temp: 
    print("City of",city_temp[0],headings[2],city_temp[2],"Celcius") 
    city_temp = mean_temp.readline().split(",") 

所以我读了该行,然后,在循环中,打印线,从读线路创建列表,如果该列表为空,假,休息一下。问题是我得到了和你一样的错误,这是因为city_temp在读完最后一行后仍然是真的。如果添加..

print(city_temp) 

你的代码,你会看到city_temp回报为“”即使它是一个空字符串列表中有内容,以便将返回true。我最好的猜测(这是一个猜测)它寻找分裂条件并返回没有任何东西,然后填充列表作为一个空字符串。

我发现的解决方案是创建列表之前的ReadLine为一个字符串的第一(或在整个循环的结束):

city_temp = mean_temp.readline() 

while city_temp: 
    city_temp = city_temp.split(',') 
    print(headings[0].capitalize(),"of",city_temp[0],headings[2],"is",city_temp[2],"Celcius") 
    city_temp = mean_temp.readline() 

这次city_temp由while循环检查作为字符串和现在返回false。希望这可以帮助其他人奋斗在这个