Warm tip: This article is reproduced from stackoverflow.com, please click
python-3.x

I am new to python coding and i do not understand how to use a variable from another method

发布于 2020-03-27 15:44:25

Here is what i have tried: I do not understand how can i use a variable from another method of same class. Also please explain how can i use a variable from a method in different class. I tried searching but could not find a solution. So what i did to pass the test cases is to copy code from calculate_percentage and paste it in find_grade method. It worked but i think this is the worst method. So please tell a possible solution. Thanks

#!/bin/python3

#Enter your code here. Read input from STDIN. Print output to STDOUT
class Student:
    def __init__(self,roll,name,marks_list):
        self.roll=roll
        self.name=name
        self.marks_list=marks_list 
    def calculate_percentage(self):
        length=len(self.marks_list)
        sum=0
        for i in self.marks_list:
            sum+=i 
        percent=sum/length 
        return int(percent)
    def find_grade(self,percent):
        if percent>=80:
            return 'A'
        elif percent>=60 and percent<80:
            return 'B'
        elif percent>=40 and percent<60:
            return 'C'
        elif percent<40:
            return 'F'

if __name__ == '__main__':
    roll=int(input())
    name=input()
    count=int(input())
    marks=[]
    for i in range(count):
        marks.append(int(input()))
    s=Student(roll,name,marks)
    print(s.calculate_percentage())
    print(s.find_grade())

i am getting the error:

print(s.find_grade())
TypeError: find_grade() missing 1 required positional argument: 'percent'
Questioner
Ajay Kumar Chowdary
Viewed
42
Grom 2020-01-31 16:56

The assumption would be that the marks are x/100 scale while otherwise your percentage will be incorrect.

As said above, you need to pass the variable percent back to the function since it is not known in the class, it is only returned.

    print(s.find_grade(s.calculate_percentage()))

or if the percentage is a class variable you can rewrite it into the class like this:

from statistics import mean

class Student2:
    def __init__(self,roll,name,marks_list):
        self.roll=roll
        self.name=name
        self.marks_list=marks_list 
    def calculate_percentage(self):
        self.percent=mean(marks)
        return int(self.percent)
    def find_grade(self):
        if self.percent>=80:
            return 'A'
        elif self.percent>=60 and self.percent<80:
            return 'B'
        elif self.percent>=40 and self.percent<60:
            return 'C'
        elif self.percent<40:
            return 'F'
    percent = int(0)

# test variables
vRoll = 2
vName = 'student'
vCount= 2
vMarks= [100, 75]

# main
if __name__ == '__main__':
    roll=vRoll
    name=vName
    count=vCount
    marks=vMarks
    s2=Student2(roll,name,marks)
    print(s2.calculate_percentage()) # 87
    print(s2.find_grade()) # A