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)

实际上,您应该以这种方式存储结果(三元组列表),而不是稍后将三个列表压缩在一起。

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])

注意:如果您创建一个具有一个国家名称、一个排放量和一个人均的类,您的代码结构将更有意义。那么这样的错误是不可能的,因为无论如何你只有一个对象列表可以迭代。

于 2013-04-16T22:59:19.480 回答
1

我宁愿用字典代替。它看起来像这样:

countries = {}
while True:
    inp = input("Enter country or (done to end): ")
    if inp == 'done':
        break;
    countries[inp] = {'emission': input("Enter emissions: ")}
    countries[inp]['capita']   = input("Enter capita: ")

for i in countries:
    print(i, 'Emission:', countries[i]['emission'],
          'and Capita', countries[i]['capita'])

输入:

Enter country or (done to end): test
Enter emissions: 1
Enter capita: 2
Enter country or (done to end): test2
Enter emissions: 3
Enter capita: 4
Enter country or (done to end): done

输出:

test Emission: 1 and Capita 2
test2 Emission: 3 and Capita 4

最后字典看起来像这样:

{'test': {'emission': '1', 'capita': '2'}, 'test2': {'emission': '3', 'capita': '4'}}
于 2013-04-16T23:09:20.567 回答