2016-10-04 80 views
1

我正在尝试打印每个城市的压力。如何将列表中的元素传递给for循环中的函数

而不是使用列表中的城市,它正在返回一个称为“城市”的城市的压力。

超级新手,无法找到具体的答案。谢谢!!!!!!

import pyowm 
owm = pyowm.OWM('eb68e3b0c908251771e67882d7a8ddff') 

city = ["tokyo", "jakarta"] 

for i in city: 
    city = owm.weather_at_place('city') 
    city = city.get_weather() 
    print (city.get_pressure()['press']) 
+3

你为什么命名所有'city'? – roganjosh

+1

另外,你的意思是'city_weather = owm.weather_at_place(i)'? – roganjosh

+0

大声笑,不知道我的意思,编程还是很新的! –

回答

2

更好的名字和事情会变得更加清晰:

import pyowm 
owm = pyowm.OWM('eb68e3b0c908251771e67882d7a8ddff') 

cities = ["tokyo", "jakarta"] 

for city in cities: 
    weather = owm.weather_at_place(city).get_weather() 
    print (weather.get_pressure()['press']) 

变化和理由:

  • 改变了城市的名单从citycities。名为city的变量应包含一个城市。不是他们的清单。
  • for循环使用的迭代变量更改为city,因为变量中将包含以下内容:一个城市的名称。 i是一个可怜的名字,因为你期望它是一个索引,而不是项目,Python for循环不会这样工作。看看for city in cities如何很好地表达实际发生的事情?
  • 改变了呼叫weather_at_place()使用变量city(从列表城市),而不是常量字符串"city",因为后者会搜索一个名为市城市
  • 将调用与weather_at_place()get_weather()链接在一起,而不是使用city来保存由前者返回的值,因为从不使用中间值。还省去了变量city用于不是城市的其他东西。
  • 将包含get_weather()结果的变量从city更改为weather,因为它包含天气而不是城市。

可读性很重要,甚至当阅读代码的人是写它的人(尤其是!)时。如果您现在感到困惑第一次编写代码,想象一下当您尝试在六个月内修改代码时,您会有多混淆!

+0

谢谢,谢谢!我非常感谢帮助和完美的代码。我赞赏<3 –

+0

@HanleySoilsmith如果这解决了您的问题,那么您应该将其标记为正确(点击答案左侧的灰色勾号将其变为绿色)。这两个奖励回答者,并告诉其他人,这个问题已解决 – roganjosh

0

Hanley,我希望你不介意我重写了你的代码。

import pyowm 
owm = pyowm.OWM('eb68e3b0c908251771e67882d7a8ddff') 

cities = ["tokyo", "jakarta"] 

for city in cities: 
    city_weather = owm.weather_at_place(city) 
    weather = city_weather.get_weather() 
    print(weather.get_pressure()['press']) 
+0

啊,我不是唯一的,但更慢的一个。 – Bouke

+1

非常感谢你!它完美地工作 –

+0

你会如此善良接受其中一个答案(我会建议kindall的答案,他更精细(哦,我是如此谦虚......))。 – Bouke

相关问题