段段努力秃头 发表于 2020-11-2 11:35:28

python小问题求解

设计一个学生类(姓名,语文成绩,数学成绩, 班级),

方法:初始化(成绩默认0);查询各科成绩;统计每个学生的平均分;按平均分进行排序;



构造学生对象,

功能:

学生可以根据自己的姓名,查询自己成绩及排名情况;

对于有加分项的学生,可以在平均分的基础上加(1~5)分。

阿奇_o 发表于 2020-11-2 11:35:29

虽然题意有点模糊,我按自己的理解写了,基本可以实现各个方法和功能。
代码如下:
class Student:
    global records
    records = {}
    def __init__(self, name='某同学', yuwen=0, math=0, classNo='未分班'):
      self.name = name
      self.yuwen = yuwen
      self.math = math
      self.classNo = classNo
      self.records = records
      records =
      
    def lookup(self, name):
      if name in records:
            yw = records
            mt = records
            return '{} 的各科成绩为:\n语文:{}\n数学:{}'.format(name, yw, mt)
      else:
            return '------查无此同学。'

    def avg_sc(self, name):
      if name in records:
            avg = (records + records)/2
            return avg
      else:
            return '------查无此同学。'

    def ranking(self):
      name_list = list(records.keys()) # 必须加list转化(因为dict.keys()返回的是dict_keys对象不能用下标)
      avg_list = ) for i in range(len(records))]
      n_a = dict(zip(name_list, avg_list))
      # 按平均分排序(即按字典的values逆序排)
      rk = sorted(n_a.items(), key=lambda kv:(kv, kv), reverse=True)
      rk = [ list(t) for t in rk]
      for r in rk:
            r.insert(0, rk.index(r)+1) # 插入排名(从1开始)
      return rk
      
if __name__ == '__main__':
    stu = Student('张三', 90, 100, '一班')
    stu.records['李四'] =
    stu.records['王五'] =
   
    print(stu.records)
    print(stu.lookup('张三'))
    print(stu.lookup('李四'))
    print('%s 的平均分为:%.2f' % ('李四', stu.avg_sc('李四')))
    print(stu.lookup('Alice'))

    print('\n按平均分排名:')
    for r in stu.ranking():
      print(r)

段段努力秃头 发表于 2020-11-2 11:36:54

是用Python实现的

小海灵 发表于 2020-11-2 17:07:27

本帖最后由 小海灵 于 2020-11-2 17:10 编辑

class Student:
    def __init__(self , name , age , gender , phone , address , email):
      self.name = name
      self.age = age
      self.gender = gender
      self.phone = phone
      self.address = address
      self.email = email

    def all(self):
      print(self.name,self.age ,self.gender,self.phone,self.address,self.email)

contacts =[Student('tom', '18' , '男' , '12345678' , '市中心' , '123@.com'),
Student('jack', '20', '男', '4008208820', '城郊', '456@.com'),
Student('mary', '20', '女', '8848520', '城中村', '789@.com'),
Student('jerry' , '19' , '女' , '11235813' , 'xx小区' , '110@q.com')]

def find_by_name(name):
    for x incontacts:
      if name == x.name:
         x.all()
         return
    print('查无此人')
def find_by_address(address):
    for x in contacts:
      if address == x.address:
            x.all()
            return
    print('查无此人')
def find_by_email(email):
    for x in contacts:
      if email == x.email:
            x.all()
            return
    print('查无此人')


x = input('请输入查找方式(英文):')
y = input('请输入关键字(变量):')

if x == 'name':
    find_by_name(y)
elif x == 'address':
    find_by_address(y)
elif x == 'email':
    find_by_email(y)
else:
    print('输入有误,无法查询')

以前写过类似的,我觉得实现出来差不多,你可以参考参考

hrp 发表于 2020-11-2 17:25:26

这题目要求不完整吧,有点语焉不详

15972441000 发表于 2020-11-2 19:26:39

这题目太范了不好回答    要回答完整那么就是一个完整的系统了

段段努力秃头 发表于 2020-11-2 23:21:10

阿奇_o 发表于 2020-11-2 22:55
虽然题意有点模糊,我按自己的理解写了,基本可以实现各个方法和功能。
代码如下:

我想问一下,那个加分项怎么弄,就是如果有加分项的话,就平均分加上几分再进行排序(自己定义某个学生有没有加分项)

阿奇_o 发表于 2020-11-2 23:41:43

段段努力秃头 发表于 2020-11-2 23:21
我想问一下,那个加分项怎么弄,就是如果有加分项的话,就平均分加上几分再进行排序(自己定义某个学生有 ...

可以在构造函数(初始化)时,
加多一个参数表示加分项即可,
如 def __init__(self, name='某同学', yuwen=0, math=0, classNo='未分班', jf=0): ....
然后在后面定义一个判断是否加分和实现加分的函数即可。
页: [1]
查看完整版本: python小问题求解