2016-10-26 2 views
0

J'essaie d'obtenir le programme de demander à l'utilisateur pour le code de l'aéroport et l'année (peut être n'importe quoi - il ne doit pas être juste ou quoi que ce soit spécifique Mon professeur veut juste demander et imprimer les données) Voici le code que j'ai.Python Wunderground données 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() 

quoi qu'il en soit, voici ce qui arrive lorsqu'il est entré:

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 

Et je veux que ce soit

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

Quelqu'un aide! Je suis un débutant donc je ne sais pas beaucoup sur python mais j'apprécierais beaucoup aide :)

Répondre

0

Le problème est que vous demandez l'entrée à l'intérieur la boucle. Donc, vous demandez une entrée chaque fois qu'il passe par ce code.

Si vous voulez seulement entrer une entrée, mettez-la en dehors de la boucle. Considérez:

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

Le titre de votre question est un peu trompeur, car l'utilisateur moyen ne sait pas ce qu'est "wunderdata". Et votre problème n'a rien à voir avec cela.

D'après ce que je comprends au sujet de votre question, il est aussi simple que de mettre vos raw_input déclarations de l'extérieur des for boucles:

# 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): 
    ... 

Je crois raw_input retourne déjà une chaîne, de sorte que la conversion ne sera pas nécessaire, mais , Je ne suis pas entièrement sûr de cela puisque j'utilise python 3.x