Looking for help with my program. There is a text file with 5 first and last names and a number grade corresponding to each person. The task is to create a user name and change the number grade to a letter grade. The problem I am having is that the program is only outputting one line (or username) from the textfile and not all 5 lines (usernames).
def main():inFile = open("grades.txt", "r")aList = inFile.readlines()grades = ["F","E","D","C","B","A"]
revised so that program will run
for lines in aList:n = lines.split()print(n[0][0].lower()+ n[1][0:4].lower()+ "001 "+ grades[eval(n[2])])inFile.close()main()
If anyone could point out where I am making the mistake it would be greatly appreciated.
OK... trying not to give you the obvious answer, here. Think about what you want to do : you want to do something "for each lines of aList". That is the meaning of :
for lines in aList:
In other words, everything in the "for" block, after this very line, will execute for each element inside aList... provided it is in the block, so properly indented.
For example :
for a in [1,2,3]:print(a)
Will display 1,2,3. "print(a)" is in the for block, as it is properly indented.
However :
for a in [1,2,3]:x = aprint(x)
Here, "print(x)" is NOT in the block. So what is going to happen here ? x will receive the value of 1, then 2, then 3. And only after that will x be printed, with the last value it received.
With that in mind, you should be able to spot what's wrong with your code.
(BTW, in order to read your file more safely and more "pythonically", you should have a look at this : https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects, particularly the end of the paragraph and the "with" idiom).