Chris Graham
Chris Graham

Reputation: 17

How to use list as a parameter for function

My first function creates a list from my input file. I'm trying to use the list I created as a parameter for my second function. How would I do this? I understand that each function has its own namespace so the way I'm doing it wrong. I'm assuming I need to assign this variable in the global namespace.

def get_data(file_object):
    while True:
        try:
            file_object=input("Enter the name of the input file: ")
            input_file=open(file_object, "r")
            break
        except FileNotFoundError:
            print("Error: file not found\n:")
    student_db=[]
    for line in input_file:
        fields=(line.split())
        name=int(fields[0])
        exam1=int(fields[1])
        exam2=int(fields[2])
        exam3=int(fields[3])
        in_class=int(fields[4])
        projects=int(fields[5])
        exercises=int(fields[6])
        record=[name,exam1,exam2,exam3,in_class,projects,exercises]
        student_db.append(record)
    student_db.sort()
    return student_db



#def calculate_grade(a_list):
#    print(a_list)
#how do I use student_db as a parameter??





def main():
#    a_list=student_db
#    b=calculate_grade(a_list)
#    print(b)
    a=get_data("data.tiny.txt")
    print(a)

Here is the input file I am using

  031   97   108   113    48   217    14
  032   97   124   147    45   355    15
  033  140   145   175    50   446    14
  034  133   123   115    46   430    15
  035  107    92   136    45   278    13
  036   98   115   130    37   387    15
  037  117    69   131    34   238    12
  038  134   125   132    50   434    15
  039  125   116   178    50   433    15
  040  125   142   156    50   363    15
  041   77    51    68    45   219    15
  042  122   142   182    50   447    15
  043  103   123   102    46   320    15
  044  106   100   127    50   362    15
  045  125   110   140    50   396    15
  046  120    98   129    48   325    13
  047   89    70    80    46   302    14
  048   99   130   103    50   436    15
  049  100    87   148    17   408    13
  050  104    47    91    37    50     9

Upvotes: 1

Views: 109

Answers (3)

Rameshkumar R
Rameshkumar R

Reputation: 140

The function get_data() returning a list which can be assigned to local variable and passed to other functions. like you are doing it now.

a=get_data("data.tiny.txt")
calculate_grade(a)

we can't directly use student_db[] because it is local to get_data(). it can declared/used as global but ultimately they make your program less flexible and more likely to contain errors that will be difficult to spot.

other approach would be using methods (object oriented mechanism).

class FileList :
    def get_data(self, file_object):
        while True:
            try:
                file_object=input("Enter the name of the input file: ")
                input_file=open(file_object, "r")
                break
            except FileNotFoundError:
                print("Error: file not found\n:")

        self.student_db=[]
        for line in input_file:
            fields=(line.split())
            name=int(fields[0])
            exam1=int(fields[1])
            exam2=int(fields[2])
            exam3=int(fields[3])
            in_class=int(fields[4])
            projects=int(fields[5])
            exercises=int(fields[6])
            record=[name,exam1,exam2,exam3,in_class,projects,exercises]
            self.student_db.append(record)
        self.student_db.sort()


    def print_object(self):
        print self.student_db

def main():
    myobj=FileList()
    myobj.get_data("data.tiny.txt")
    myobj.print_object()

Upvotes: 0

Petzku
Petzku

Reputation: 251

In your example, the student_db is (as I understood) stored in the variable a. You can just pass that variable to the second function, so just add calculate_grade(a) to your main function (after defining it, obviously).

Upvotes: 0

letsc
letsc

Reputation: 2567

Your main (and commented out code) should look like:

def calculate_grade(a_list):
    print(a_list)


def main():
    a_list=get_data("data.tiny.txt")
    calculate_grade(a_list)
main()

Remember this:

If your function returns a value. then you would assign it to a variable in the global namespace and use it at different points. If it has a print statement then you do not need to use print again when you are calling it

Upvotes: 1

Related Questions