1

I was learning how to use loops and was doing this program for practice. However, the only thing I am having some difficulty with is printing the list only once for each input correctly. Here is my code:

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

I am inputting this:

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 

This is the output I am getting:

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 

It is printing all possible combinations of the emissions and capita but I only want it to print what I inputted as emissions/capita for each country. Anyone know how to fix this?

asked Apr 16, 2013 at 22:56

3 Answers 3

4

This is ok as a learning exercise, but the Pythonic way to perform this task is to use zip.

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

Actually you should store the results that way (a list of 3-tuples) instead of with three lists that you zip together later.

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)
answered Apr 16, 2013 at 23:05
Sign up to request clarification or add additional context in comments.

Comments

2

Instead of doing this:

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

Do this:

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

Note: Your code will be more meaningfully structured if you create a class that has one country name, one emission and one capita. Then a mistake like this would be impossible since you'd only have one list of objects to iterate over, anyway.

answered Apr 16, 2013 at 22:59

1 Comment

Also, do you know how I can add together all the emissions for all the countries I inputted?
1

I'd rather use a dictionary instead. It'd look like something like this:

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

Input:

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

Ouput:

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

At the end the dictionary looks like that:

{'test': {'emission': '1', 'capita': '2'}, 'test2': {'emission': '3', 'capita': '4'}}
answered Apr 16, 2013 at 23:09

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.