2016-03-09 1 views
2

Je sais que la solution n'est pas loin ici, mais j'ai du mal à implémenter la possibilité d'attribuer une valeur numérique à l'échelle de la carte en fonction de l'entrée de l'utilisateur. Le code est assez explicite mais je voudrais que l'utilisateur sélectionne parmi 4 états de zoom, en utilisant l'entrée, retourne une valeur numérique sur ma carte comme point de départ du zoom.Comment gérer correctement python

zoom=5 
while True: 
    where = raw_input('Where would you like a map of?') 
    try: 
     heatmap = folium.Map(location=geo(where), tiles='Stamen Toner', zoom_start=zoom) 
     pointmap = folium.Map(location=geo(where), tiles='Stamen Toner', zoom_start=zoom) 
    except AttributeError, GeocoderServiceError: 
     print "Cannot create map with the given location. Please try again." 
    else: 
     break 
while True: 
    zoom_state = ['city', 'state', 'country', 'world'] 
    zoom_state= raw_input('What level of detail would you like: city, state, country, or world?') 
    try: 
     for response in zoom_state: 
      if response is ['city']: 
       zoom == 9 
       if response is ['state']: 
        zoom == 7 
        if response is ['country']: 
         zoom == 5 
         if response is ['world']: 
          zoom == 9 
    except TypeError, IndexError: 
     print 'Please enter: city, state, country, or world. Try again' 
     continue 
    else: 
     break 

heatmap = folium.Map(location=geo(where), tiles='Stamen Toner', zoom_start=zoom) 
pointmap = folium.Map(location=geo(where), tiles='Stamen Toner', zoom_start=zoom) 

En l'état actuel, je peux mettre n'importe quoi dans zoom_state et il fonctionnera.

Merci d'avance!

+1

Tout d'abord, votre entrée brute pour le niveau de détail est sur l'écriture de la liste des zoom_state. Quelle est la sortie lorsque vous exécutez? – benrules2

+0

Ce code a beaucoup de problèmes. D'abord, vous définissez zoom_state, puis le modifiez. Deuxièmement, votre imbrication des instructions if est suspecte. Troisièmement, vous êtes en train de boucler zoom_state (pour une raison quelconque), mais vous n'utilisez jamais la variable de réponse dans la boucle. – Oli

+0

Merci à vous deux, évidemment je suis nouveau à ce (premier trimestre). La sortie est qu'il fonctionne avec la valeur par défaut de 5 je crois. Je vais changer zoom_state pour la réponse j'espère l'obtenir en état de marche –

Répondre

2

Vous cherchez peut-être quelque chose comme ceci:

zoom=5 
while True: 
    where = raw_input('Where would you like a map of?') 
    try: 
     heatmap = folium.Map(location=geo(where), tiles='Stamen Toner', zoom_start=zoom) 
     pointmap = folium.Map(location=geo(where), tiles='Stamen Toner', zoom_start=zoom) 
    except AttributeError, GeocoderServiceError: 
     print "Cannot create map with the given location. Please try again." 
    else: 
     break 
while True: 
    zoom_level = {'city':9, 'state':7, 'country':5, 'world':9} 
    zoom_detail = raw_input('What level of detail would you like: city, state, country, or world?') 
    try: 
     zoom = zoom_level[str(zoom_detail)] 
    except TypeError, IndexError: 
     print 'Please enter: city, state, country, or world. Try again' 
     continue 
    else: 
     break 

heatmap = folium.Map(location=geo(where), tiles='Stamen Toner', zoom_start=zoom) 
pointmap = folium.Map(location=geo(where), tiles='Stamen Toner', zoom_start=zoom) 
+0

C'était exactement ce que je cherchais J'apprécie vraiment votre aide. Désolé d'avoir mis un tel bordel ici! :) –

+0

Pas de problème! Tout le monde doit apprendre quelque part. Pouvez-vous voir ce que j'ai fait avec le zoom_level? Je l'ai transformé en un dictionnaire, donc en regardant le mot-clé zoom_detail renvoie la valeur appariée à ce nom. Il simplifie l'instruction if et est assez python-esque. – benrules2

+0

J'étais vraiment excité de voir cela utilisé ici. C'est BEAUCOUP plus élégant que tout ce que je pensais mettre en œuvre. Merci encore, c'était très utile! –