NameError: имя 'countrychoice' не определено

У меня возникли проблемы с текущей программой, которую я пишу.

Я позволю пользователю ввести страну, а затем город в этой стране, а затем увидеть прогноз погоды для выбранного города с помощью API.

Я использую класс, как это:

class requestChoice:

    def __init__(self):
        self.countrychoice = None
        self.citychoice = None

    def countryChoice(self):
        self.countrychoice = input("Enter which country your city is in(in english): ")

    def cityChoice(self):
        self.citychoice = input("Enter the name of the city: ")

И моя основная программа выглядит так:

from requestchoice import requestChoice

import requests

if __name__ == '__main__':
    """Introducion"""
    print ("\nThis program lets you see a weather forecast for your choosen city.")

rc = requestChoice()
while True:
    print("\nWhen you have typed in country and city, press 3 in the menu to see the weather forecast for your choice.\n")
    menu = input("\nPress 1 for contry\nPress 2 for city\nPress 3 to see forecast\nPress 4 to exit\n")
    if menu == "1":
        rc.countryChoice()
    elif menu == "2":
        rc.cityChoice()
    elif menu == "3":
        r = requests.get("http://api.wunderground.com/api/0def10027afaebb7/forecast/q/" + countrychoice + "/" + citychoice + ".json")
        data = r.json()
        try:
            for day in data['forecast']['simpleforecast']['forecastday']:
                print (day['date']['weekday'] + ":")
                print ("Conditions: ", day['conditions'])
                print ("High: ", day['high']['celsius'] + "C", '\n' "Low: ", day['low']['celsius'] + "C", '\n')
        except Exception as e:
            print ("\nHave you typed in the correct country and city?\nBecause we got a" ,e, "error")
    else: 
        print ("\nGoodbye")
        break

Когда я запускаю свою программу, я получаю сообщение об ошибке NameError: name 'countrychoice' is not defined, Это будет та же ошибка с citychoice, Я попытался создать список в своем классе и добавить countrychoice в список, но без удачи. Как я должен заставить это работать как хотелось бы?

3 ответа

Решение

Вы получаете NameError Здесь:

r = requests.get("http://api.wunderground.com/api/0def10027afaebb7/forecast/q/" + countrychoice + "/" + citychoice + ".json")

потому что у вас нет имен countrychoice а также citychoice определены. Возможно, вы хотели использовать rc.countrychoice а также rc.citychoice вместо?

Вы должны получить к ним доступ с соответствующим именем объекта. В этом случае

rc.countrychoice
rc.citychoice

Итак, эта строка

r = requests.get("http://api.wunderground.com/api/0def10027afaebb7/forecast/q/" + countrychoice + "/" + citychoice + ".json")

становится

r = requests.get("http://api.wunderground.com/api/0def10027afaebb7/forecast/q/" + rc.countrychoice + "/" + rc.citychoice + ".json")

Вам нужно использовать rc.countrychoice а также rc.citychoice Вот

    r = requests.get("http://api.wunderground.com/api/0def10027afaebb7/forecast/q/" + rc.countrychoice + "/" + rc.citychoice + ".json")
Другие вопросы по тегам