0

我无法再使用我正在处理的程序并有一个问题。我会先发布我的代码。

我的课程代码如下所示:

import requests
import json

class requestNew:

    def __init__(self):
        self.countrychoice = []
        self.citychoice = []

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

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

正如你所看到的,我已经输入def countryChoice(self):和输入def cityChoice(self): 我希望它从类函数中进入主脚本。

这就是我的主脚本的相关部分目前的样子:

from requestnew import requestNew


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


    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 country\nPress 2 for city\nPress 3 to see forecast\nPress 4 to exit\n")
        if menu == "1":
            rq.countryChoice()
        elif menu == "2":
            rq.cityChoice()

此时我的主脚本只是调用类函数,它们通过输入来完成工作。但是我如何从类中获取输入并进入主脚本。

正如您在我的课程中看到的,输入附加到以下列表中:

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

如果我在我的主脚本中获得输入,是否仍然可以将输入附加到self.countrychoice.append(countryc)我的班级中?我需要能够做到这一点,因为稍后在我的课堂上我正在使用这样的列表项:

def forecastRequest(self):
    r = requests.get("http://api.wunderground.com/api/0def10027afaebb7/forecast/q/" + self.countrychoice[-1] + "/" + self.citychoice[-1] + ".json")
    self.data = r.json()

正如您在上面的代码中看到的那样,我正在使用 list-items self.countrychoice[-1] + "/" + self.citychoice[-1],这是为我的 api 获取正确的地址。

所以我的问题是,如何在不弄乱列表的附加内容的情况下将输入从课堂中取出并放入我的主脚本中?如果可能的话。

抱歉,如果有任何解释或写得不好。由于我是初学者,这对我来说真的很困惑。

4

2 回答 2

2

您需要从方法中返回一个值:

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

在主脚本中,您可以选择国家/地区:

countryChoice = rq.countryChoice()

此外,您仍然可以通过访问从列表中获取所有值rq.countrychoice。相同的推理适用于cityChoicerq.citychoice

于 2013-11-14T22:29:50.327 回答
1

要从外部访问对象的属性,您的操作方式与从内部相同,只是使用对象变量而不是self.

例如,在类中,您可以这样做:

self.countrychoice[-1] + "/" + self.citychoice[-1]

在类之外,将实例存储在 中rq,您可以执行以下操作:

rq.countrychoice[-1] + "/" + rq.citychoice[-1]

同样,在您调用 之后rq.forecastRequest(),您可以访问数据作为rq.data。所以,你可以这样写:

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 country\nPress 2 for city\nPress 3 to see forecast\nPress 4 to exit\n")
    if menu == "1":
        rq.countryChoice()
    elif menu == "2":
        rq.cityChoice()
    elif menu == "3":
        rq.forecastChoice()
        for line in rq.data.splitlines():
            print(line)
于 2013-11-14T22:30:57.550 回答