Python初学之学生和老师的question和answer问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq262593421/article/details/102647942

1、问题需求

定义一个类:Person,有 name, age 属性
定义一个子类:Teacher, 有 tno(教师号) 属性, 有 question() 
定义一个子类:Student, 有 sno(学号) 属性,   有 answer()

打印 老师的信息 和 学生的信息
  
老师调用 question(), 把 下面的字符串持久到 question.txt 文件
1 + 2 =
3 * 5 =
9 - 1 =
100 * 3 =
3000 - 1000 =
  
  学生调用answer(),从 question.txt 文件中读取每行数据,封装成一个对象(包括 结果答案);
  计算每道题的答案并把 试题内容和答题结果 打印到控制台

2、 代码实现

# 通过切分问题,计算出答案
class Answer():
    def __init__(self):
        pass
    def calculate(self, question):
        list = question.split(' ')
        a = int(list[0])
        b = int(list[2])
        if list[1] == '+':
            return a + b
        elif list[1] == '-':
            return a - b
        elif list[1] == '*':
            return a * b
        elif list[1] == '/':
            return a / b

# Person基类
class Person(object):
    def __init__(self):
        pass

# 教师类,将问题持久化到文本中
class Teacher(Person):
    def __init__(self, tno):
        super(Teacher, self).__init__()
        self.tno = tno
    def question(self):
        list = ['1 + 2 = ', '3 * 5 = ', '9 - 1 = ', '100 * 3 = ', '3000 - 1000 =  ']
        # list.append(content)
        file = open('question.txt', 'w+')
        for i in list:
            file.write(i + '\n')
    def __str__(self):
        return '老师编号:'+str(self.tno)

# 学生类,将文本答案逐行读出,调用Answer类返回每一行的答案
class Student(Person):
    def __init__(self, sno):
        super(self.__class__, self).__init__()
        self.sno = sno
    def answer(self):
        file = open('question.txt', 'r+')
        lines = file.readlines()
        for i in lines:
            a = Answer().calculate(i.strip('\n'))
            print(i.strip('\n'), a)
    def __str__(self):
        return '学生编号:'+str(self.sno)

t = Teacher(1)
t.question()
s = Student(2)
print(t)
print(s)
s.answer()

3、运行结果

4、总结

这份题目很适合做python初学的练习。

这里涉及到了字符串分割、文件读写、元组的使用和类的继承等知识点。

初学python,对python的语法和类的使用还不是很熟悉,有什么不足的地方还请大家多多指点。

猜你喜欢

转载自blog.csdn.net/qq262593421/article/details/102647942