class Student(object):
    def __init__(self, name,number,grade,level):
        self.name = name
        self.number = number
        self.grade = grade
        self.level = level
        self.times = len(level.split(' '))
    def p(self):
        return "{}'s student number is {}, and his grade is {}. He submitted {} assignments, each with a grade of {}".format(self.name,self.number,self.grade,self.times,self.level)
name = input()
number = input()
grade = int(input())
level = input()
student = Student(name,number,grade,level)
print(student.p())

#https://zhuanlan.zhihu.com/p/30024792 类属性
# class Circle(object):  # 创建Circle类,Circle为类名
#    pass  # 此处可添加属性和方法
# 在定义 Circle 类时,可以为 Circle 类添加一个特殊的 __init__() 方法,当创建实例时,__init__() 方法被自动调用为创建的实例增加实例属性。
# class Circle(object):  # 创建Circle类
#    def __init__(self, r): # 初始化一个属性r(不要忘记self参数,他是类下面所有方法必须的参数)
#        self.r = r  # 表示给我们将要创建的实例赋予属性r赋值
# 注意:__init__() 方法的第一个参数必须是 self(self代表类的实例,可以用别的名字,但建议使用约定成俗的self),后续参数则可以自由指定,
# 和定义函数没有任何区别。
# circle1 = Circle(1)  # 创建实例时直接给定实例属性,self不算在内
# circle2 = Circle(2)
# print(circle1.r)  # 实例名.属性名 访问属性
# print(circle2.r)  # 我们调用实例属性的名称就统一了
# 注意:实例名.属性名 circle1.r 访问属性,是我们上面Circle类__init__() 方法中 self.r 的 r 这个实例属性名,
# 而不是__init__(self, r)方法中的 r 参数名,如下更加容易理解:

# class Circle(object):  # 创建Circle类
#    def __init__(self, R):  # 约定成俗这里应该使用r,它与self.r中的r同名
#        self.r = R

# circle1 = Circle(1)  
# print(circle1.r)  #我们访问的是小写r
# 面试喜欢问的问题:创建类时,类方法中的self是什么?
# self 代表类的实例,是通过类创建的实例 (注意,在定义类时这个实例我们还没有创建,它表示的我们使用类时创建的那个实例)
# 实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。实例属性访问优先级比类属性高,所以我们访问时优先访问实例属性,
# 它将屏蔽掉对类属性的访问。