2013-04-16 40 views
1

我正在学习如何使用循环,并正在执行此程序。不过,我唯一遇到的困难是仅为每个输入正确打印列表一次。这里是我的代码:简单python快速帮助(学习列表)

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   

它打印排放和人均的所有可能的组合但我只希望它能打印我输入的每个国家的排放量/人均排放量。有人知道怎么修这个东西吗?

回答

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

@Drake Walter:'sum' – Patashu

+1

再次感谢! –

4

作为学习练习,这是可以的,但执行此任务的Pythonic方法是使用zip

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

实际上,您应该以这种方式存储结果(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) 
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'}}