1

私はループの使い方を学んでいて、練習のためにこのプログラムを実行していました。ただし、私が問題を抱えているのは、入力ごとに1回だけリストを正しく印刷することだけです。これが私のコードです:

country_list=[]
emission_list=[]
capita_list=[]
total=0
end_loop=False
together=[]

while True:
    country=raw_input("Enter country or (done to end): ")
    if country=="done":
        break
    else:
        emission=input("Enter emissions: ")
        capita=input("Enter capita: ")

        country_list.append(country)
        emission_list.append(emission)
        capita_list.append(capita)
        total+=1

for x in range(len(country_list)):
    for y in range(len(emission_list)):
        for z in range(len(capita_list)):
            end_loop=True
            print country_list[x]+": Emission="+str(emission_list[y]),"and Capita="+str(capita_list[z])           

私はこれを入力しています:

Enter country or (done to end): Testcase
Enter emissions: 1
Enter capita: 2
Enter country or (done to end): Testcase2
Enter emissions: 3
Enter capita: 4
Enter country or (done to end): done   

これは私が得ている出力です:

Testcase: Emission=1 and Capita=2
Testcase: Emission=1 and Capita=4
Testcase: Emission=3 and Capita=2
Testcase: Emission=3 and Capita=4
Testcase2: Emission=1 and Capita=2
Testcase2: Emission=1 and Capita=4
Testcase2: Emission=3 and Capita=2
Testcase2: Emission=3 and Capita=4          

排出量と人口の可能なすべての組み合わせを出力していますが、各国の排出量/人口として入力したものだけを出力したいのです。誰でもこれを修正する方法を知っていますか?

4

3 に答える 3

4

これは学習課題としては問題ありませんが、このタスクを実行する Pythonic の方法は を使用することzipです。

for cnty, em, cap in zip(country_list, emission_list, capita_list):
    print "{}: Emission={} and Capita={}".format(cnty, em, cap)

実際には、後で一緒に圧縮する 3 つのリストではなく、その方法 (3 タプルのリスト) で結果を保存する必要があります。

cecs = []

while True:
    country  = raw_input("Enter country (or nothing to end): ").strip()
    if not country:
        break
    emission = input("Enter emissions: ").strip()
    capita   = input("Enter capita: ").strip()

    cecs.append((country, emission, capita))

# total = len(cecs)

for cec in cecs:
    print "{}: Emission={} and Capita={}".format(*cec)
于 2013-04-16T23:05:30.700 に答える
2

これを行う代わりに:

for x in range(len(country_list)):
    for y in range(len(emission_list)):
        for z in range(len(capita_list)):
            print country_list[x]+": Emission="+str(emission_list[y]),"and Capita="+str(capita_list[z])

これを行う:

for x in range(len(country_list)):
    print country_list[x]+": Emission="+str(emission_list[x]),"and Capita="+str(capita_list[x])

注: 1 つの国名、1 つの排出量、および 1 つの人口を持つクラスを作成すると、コードはより意味のある構造になります。とにかく、反復するオブジェクトのリストが1つしかないため、このような間違いは不可能です。

于 2013-04-16T22:59:19.480 に答える