鱼C论坛

 找回密码
 立即注册
查看: 3446|回复: 7

[已解决]python小问题求解

[复制链接]
发表于 2020-11-2 11:35:28 | 显示全部楼层 |阅读模式
20鱼币
设计一个学生类(姓名,语文成绩,数学成绩, 班级),

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



构造学生对象,

功能:

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

对于有加分项的学生,可以在平均分的基础上加(1~5)分。
最佳答案
2020-11-2 11:35:29
虽然题意有点模糊,我按自己的理解写了,基本可以实现各个方法和功能。
代码如下:
  1. class Student:
  2.     global records
  3.     records = {}
  4.     def __init__(self, name='某同学', yuwen=0, math=0, classNo='未分班'):
  5.         self.name = name
  6.         self.yuwen = yuwen
  7.         self.math = math
  8.         self.classNo = classNo
  9.         self.records = records
  10.         records[name] = [yuwen, math, classNo]
  11.         
  12.     def lookup(self, name):
  13.         if name in records:
  14.             yw = records[name][0]
  15.             mt = records[name][1]
  16.             return '{} 的各科成绩为:\n语文:{}\n数学:{}'.format(name, yw, mt)
  17.         else:
  18.             return '------查无此同学。'

  19.     def avg_sc(self, name):
  20.         if name in records:
  21.             avg = (records[name][0] + records[name][1])/2
  22.             return avg
  23.         else:
  24.             return '------查无此同学。'

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

  46.     print('\n按平均分排名:')
  47.     for r in stu.ranking():
  48.         print(r)
复制代码

最佳答案

查看完整内容

虽然题意有点模糊,我按自己的理解写了,基本可以实现各个方法和功能。 代码如下:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-2 11:35:29 | 显示全部楼层    本楼为最佳答案   
虽然题意有点模糊,我按自己的理解写了,基本可以实现各个方法和功能。
代码如下:
  1. class Student:
  2.     global records
  3.     records = {}
  4.     def __init__(self, name='某同学', yuwen=0, math=0, classNo='未分班'):
  5.         self.name = name
  6.         self.yuwen = yuwen
  7.         self.math = math
  8.         self.classNo = classNo
  9.         self.records = records
  10.         records[name] = [yuwen, math, classNo]
  11.         
  12.     def lookup(self, name):
  13.         if name in records:
  14.             yw = records[name][0]
  15.             mt = records[name][1]
  16.             return '{} 的各科成绩为:\n语文:{}\n数学:{}'.format(name, yw, mt)
  17.         else:
  18.             return '------查无此同学。'

  19.     def avg_sc(self, name):
  20.         if name in records:
  21.             avg = (records[name][0] + records[name][1])/2
  22.             return avg
  23.         else:
  24.             return '------查无此同学。'

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

  46.     print('\n按平均分排名:')
  47.     for r in stu.ranking():
  48.         print(r)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-2 11:36:54 | 显示全部楼层
是用Python实现的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-2 17:07:27 | 显示全部楼层
本帖最后由 小海灵 于 2020-11-2 17:10 编辑
  1. class Student:
  2.     def __init__(self , name , age , gender , phone , address , email):
  3.         self.name = name
  4.         self.age = age
  5.         self.gender = gender
  6.         self.phone = phone
  7.         self.address = address
  8.         self.email = email

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

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

  15. def find_by_name(name):
  16.     for x in  contacts:
  17.         if name == x.name:
  18.            x.all()
  19.            return
  20.     print('查无此人')
  21. def find_by_address(address):
  22.     for x in contacts:
  23.         if address == x.address:
  24.             x.all()
  25.             return
  26.     print('查无此人')
  27. def find_by_email(email):
  28.     for x in contacts:
  29.         if email == x.email:
  30.             x.all()
  31.             return
  32.     print('查无此人')


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

  35. if x == 'name':
  36.     find_by_name(y)
  37. elif x == 'address':
  38.     find_by_address(y)
  39. elif x == 'email':
  40.     find_by_email(y)
  41. else:
  42.     print('输入有误,无法查询')
复制代码


以前写过类似的,我觉得实现出来差不多,你可以参考参考
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-2 17:25:26 From FishC Mobile | 显示全部楼层
这题目要求不完整吧,有点语焉不详
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-2 19:26:39 | 显示全部楼层
这题目太范了  不好回答    要回答完整  那么就是一个完整的系统了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我想问一下,那个加分项怎么弄,就是如果有加分项的话,就平均分加上几分再进行排序(自己定义某个学生有没有加分项)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

可以在构造函数(初始化)时,
加多一个参数表示加分项即可,
如 def __init__(self, name='某同学', yuwen=0, math=0, classNo='未分班', jf=0): ....
然后在后面定义一个判断是否加分和实现加分的函数即可。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-29 07:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表