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。同じ理由が と にも当てはまりcityChoiceますrq.citychoice

于 2013-11-14T22:29:50.327 に答える
1

外部からオブジェクトの属性にアクセスするには、 の代わりに object 変数を使用することを除いて、内部からと同じ方法でアクセスします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 に答える