Python3 - 关于范围的while循环的建议?

时间:2017-08-09 18:17:22

标签: python-3.x

下午好!我对Python比较陌生 - 我正在为一个班级做作业。

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

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

我在StackOverflow上搜索过 - 以及使用Python在线挖掘range()函数文档。我想我只需要正确地计算范围(),我就完成了它。

如果我取出范围,我会得到同样的错误 - 所以我试图在mean_temps中将for / in更改为 - for city: 结果是输出只显示了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!

2 个答案:

答案 0 :(得分:0)

当您确实想要使用__radd__循环时,您已经使用了def __add__(self, other): print('using __add__()') if isinstance(other, Adder): other = other.data return self.data + other def __radd__(self, other): print('using __radd__()') return self.__add__(other) 循环。您的while循环没有条件,因此,它将评估为for,并永远运行。您应该在模式中使用while循环

True

在您的情况下,您将需要使用

for

编辑: 如果必须使用while循环,则可以使用for x in x: do stuff 循环增加的变量for x in range(len(city_temp)): for city in means_temp: x循环可以在while小于while时运行。

一个基本的例子是

x

编辑2: 你还说他们希望你离开一段时间。如果您希望while循环永远运行,除非以后满足条件,您可以使用break command来停止range(len(city_temp))text = "hi" counter = 0 while counter < 10: print(text) counter += 1 循环。

答案 1 :(得分: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(",")

所以我读了一行,然后在循环中打印行,从读取行创建列表,如果列表为空,或者为false,则为break。问题是我得到了和你一样的错误,这是因为在读完最后一行后,city_temp仍然是真的。如果你添加..

print(city_temp)  

到你的代码,你会看到city_temp返回为“”,即使它是一个空字符串,列表也有内容,所以会返回true。我最好的猜测(也就是猜测)它会查找拆分条件并返回任何内容,然后将列表填充为空字符串。

我找到的解决方案是在创建列表之前首先(或在整个循环结束时)读取字符串:

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()

这次time_temp被while循环检查为字符串,现在返回false。希望这有助于其他与此斗争的人