2016-10-26 8 views
0

私は、空港コードと年をユーザーに尋ねるプログラムを手に入れようとしています(何でも構いません - それは正しいものでも特定のものでもなくても構いません。データを印刷する) は、ここで私が持っているコードです:とにかくPython Wunderground raw_inputデータ

import urllib2 
from bs4 import BeautifulSoup 

# Create/open a file called wunderdata.txt which will be a CSVfile 
f = open('wunderdata.txt', 'w') 

# Iterate through months and day 
for m in range(1, 13): 
    for d in range(1,32): 
     # Check if already processed all days in the month 
     if (m == 2 and d> 28): 
      break 
     elif (m in[4, 6, 9, 11] and d > 30): 
      break 

    # Open wunderground.com url 
    airport = str(raw_input("Enter airport code: ")) 
    year = str(raw_input("Enter year: ")) 

    timestamp = '2009' + str(m) + str(d) 
    print ("Getting data for ") + timestamp 

    url = "http://www.wunderground.com/history/airport/" + airport + "/" + year + "/" + str(m) + "/" + str(d) + "/DailyHistory.html?" 
    page = urllib2.urlopen(url)  

    # Get temperature from page 
    soup = BeautifulSoup(page, "html.parser") 


    #the following two lines are the original (textbook) and first attempt to fix 
    # dayTemp = soup.body.wx-value.b.string 
    dayTemp = soup.findAll(attrs={"class":"wx-value"})[6].get_text() 
    seaLevel = soup.findAll(attrs={"class":"wx-value"})[16].get_text()  



    # Format month for timestamp 
    if len(str(m)) < 2: 
     mStamp = '0' + str(m) 
    else: 
     mStamp = str(m) 

    # Format day for timestamp 
    if len(str(d)) < 2: 
     dStamp = '0' + str(d) 
    else: 
     dStamp = str(d) 

    # Build timestamp 
    #timestamp = '2009' + mStamp + dStamp 

    # Write timestamp and temperature to file 
    f.write(timestamp + ',' + dayTemp + " " + "Sea Level Pressure: " + seaLevel + '\n') 

# Done getting data! Close file. 
f.close() 

、これは、入力されたときに来るものです:

python get-weather-data.py 
Enter airport code: KBUF 
Enter year: 2009 
Getting data for 200911 
Enter airport code: KBUF 
Enter year: 2009 
Getting data for 200912 
Enter airport code: KBUF 
Enter year: 2009 
Getting data for 200913 

をそして、私はそれになりたい

python get-weather-data.py 
Enter airport code: KBUF 
Enter year: 2009 
Getting data for 200911 
Getting data for 200912 
Getting data for 200913 

誰かが助けてください!私は初心者ですので、私は多くのPythonについて知らないが、非常に助けを感謝します:)

答えて

0

ループ内の入力を求めている問題です。したがって、あなたはそのコードを通過するたびに入力を求めています。

入力を1回だけ取得する場合は、ループの外側に配置します。検討してください:

airport = str(raw_input("Enter airport code: ")) 
year = str(raw_input("Enter year: ")) 

for m in range(1, 13): 
    for d in range(1,32): 
     # Check if already processed all days in the month 
... 
0

平均的なユーザーは "wunderdata"が何であるかわからないので、あなたの質問のタイトルは少し誤解を招くものです。あなたの問題はこれとは何の関係もありません。

私はあなたの質問について理解して何から、それはforループの外にあなたのraw_input文年代を置くのと同じくらい簡単です:

# Create/open a file called wunderdata.txt which will be a CSVfile 
f = open('wunderdata.txt', 'w') 

# Enter necessary data 
airport = str(raw_input("Enter airport code: ")) 
year = str(raw_input("Enter year: ")) 

# Iterate through months and day 
for m in range(1, 13): 
    ... 

しかし私は、raw_inputはすでに文字列を返すので、変換は必要ではないだろうと信じて、私はpython 3.xを使用しているので、私は完全には分かりません。

関連する問題