Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Loop through List
#1
Good morning, I can really use some helpm

I need to iterate over a list and if the criteria is met, add item to list. Then print list with the values. Here is what I have:
The code up until the end works as expected.

# After reading the data, 
# a. Print the state with the highest mean Verbal SAT score 
# b. Print each state that has a mean Math SAT score greater than 500



satfile = open('state_satscores_2004.txt','r')
count = 0
SATList = []

for line in satfile:
    count += 1
    textline = line.strip()
    items = textline.split()
    SATList.append(items)
        

# print the number of teams read
print('Number of Lines:', count)
print(SATList)
print('\n','\n')

state = []
for line in SATList:
     state.append(line[0])
print('Here is your state list')
print(state)
print('\n','\n')


verbal = []
for line in SATList:
     verbal.append(line[1])
print('Here is your verbal list')
print(verbal)
print('\n','\n')


math = []
for line in SATList:
     math.append(line[2])
print('Here is your Math list')
print(math)
print('\n','\n')


max_verbal = max(verbal)
max_state = state[verbal.index(max_verbal)]
print('The state with the highest mean Verbal SAT score is:',max_state,'With a score of:',max_verbal)
print('\n','\n')



#THIS IS THE PART I NEED HELP WITH
stategrades = []
goodgrades = []
print('Here are your good grades')
for i,j in SATList:
    if math[2] > str(500):
        stategrades.append(i)
        goodgrades.append(j)
print(stategrades)
Thank you for any help!!
Reply
#2
More information would be helpful. What exactly is the problem you are having? If you get an error, please post the full text of the error. If the output is wrong, how is it wrong?

One thing I do note is line 59: comparing numbers with strings doesn't work well. '9' > '500' is True.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#3
(Jul-30-2019, 12:51 PM)ichabod801 Wrote: More information would be helpful. What exactly is the problem you are having? If you get an error, please post the full text of the error. If the output is wrong, how is it wrong?

One thing I do note is line 59: comparing numbers with strings doesn't work well. '9' > '500' is True.


Thank you for responding. As of now I get a ValueError

IST_652_Quiz_1
ValueError                                Traceback (most recent call last)
<ipython-input-1-8b991c69553e> in <module>
     56 goodgrades = []
     57 print('Here are your good grades')
---> 58 for i,j in SATList:
     59     if math[2] > str(500):
     60         stategrades.append(i)

ValueError: too many values to unpack (expected 2)
Reply
#4
Okay, SATList has three sub-items (state, verbal, math) in each item, and you are trying to unpack two. I'm not sure why you are comparing math[2] in the loop. That's the same value (the third math score in the file) for every time through the loop. I think you want:

for row in SATList:
    if row[2] > '500':
Although, I would again note that comparing numbers as strings does not work well. I would convert all of the scores with int() or float() as appropriate.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#5
(Jul-30-2019, 03:17 PM)ichabod801 Wrote: Okay, SATList has three sub-items (state, verbal, math) in each item, and you are trying to unpack two. I'm not sure why you are comparing math[2] in the loop. That's the same value (the third math score in the file) for every time through the loop. I think you want:

for row in SATList:
    if row[2] > '500':
Although, I would again note that comparing numbers as strings does not work well. I would convert all of the scores with int() or float() as appropriate.

Thank you, I guess I'm not following. I thought I was unpacking all three suit items. Do you have a more accurate way to write the program.

I really appreciate the time and the lesson
Reply
#6
(Jul-30-2019, 04:22 PM)jeran042 Wrote: I thought I was unpacking all three suit items.

No, you had for i,j in SATList:. i, j is only two names, so it only unpacks two values. To unpack three values you need three names on the left: i, j, k. Although it would be better to have more descriptive variable names.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Appending to list of list in For loop nico_mnbl 2 2,349 Sep-25-2020, 04:09 PM
Last Post: nico_mnbl
  Append list into list within a for loop rama27 2 2,356 Jul-21-2020, 04:49 AM
Last Post: deanhystad
  loop through list or double loop 3Pinter 4 3,414 Dec-05-2018, 06:17 AM
Last Post: 3Pinter
  Write a for loop on list of lists without changing the shape of the main list Antonio 3 3,741 Jun-19-2018, 02:16 AM
Last Post: ichabod801
  For looping over a list, editing the list from inside the loop? Krookroo 3 3,932 Sep-04-2017, 05:08 PM
Last Post: Krookroo
  How to change from printFacts ( ) to return a list & Loop over list when writing CSV Ivan1 14 8,222 Aug-30-2017, 12:14 PM
Last Post: metulburr

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020