设计一个学生类&班级类

第一题
  • 设计一个学生类

    • 属性:姓名、学号、年龄、成绩
  • 设计一个班级类要求:实现向班级中添加学生、删除学生、查看学生、按照指定条件排序
    • 属性:班级代号,所有学生
  • 需要使用
  • calss, __int__, __str__, sort, append, dict, list, remove, for in
class Stu:    # 设置学生基础属性    def __init__(self, name, num, age, cj):        self.name = name        self.num = num        self.age = age        self.cj = cj

    def __str__(self):        return ‘姓名:{},学号:{},年龄:{},成绩{}‘.format(self.name, self.num, self.age, self.cj)

# 查看学生类是否创建成功# c = Stu(‘小米‘, 100, 18, 66)# print(c)

class Class1:    def __init__(self, name):        self.name = name        self.class_dict = {}        self.class_list = []

    def add_stu(self, stu):        # 添加学生至对应字典列表        self.class_dict[stu.num] = stu        self.class_list.append(stu)

    def del_stu(self, num):        # 弹出后删除        stu_danchu = self.class_dict.pop(num)        self.class_list.remove(stu_danchu)

    def sort_stu(self, key, reverse=False):        # 排序        self.class_list.sort(key=key, reverse=reverse)

    def show_class(self):        # 打印        print(self.name)        for i in self.class_list:            print(i)

    def chazhao_stu(self, num):        return print(self.class_dict.get(num))

# 测试代码

import random

c1 = Class1(‘python‘)

for i in range(10):    name = ‘stu‘ + str(i)    num = 100 + i    age = random.randint(18, 25)    cj = random.randint(70, 100)    c = Stu(name, num, age, cj)    c1.add_stu(c)

# 展示c1.show_class()# 排序c1.sort_stu(key=lambda s: s.num, reverse=True)# 查找c1.chazhao_stu(108)# 删除c1.del_stu(109)c1.show_class()

原文地址:https://www.cnblogs.com/wenjiangtao/p/10546956.html

时间: 2024-08-29 17:19:18

设计一个学生类&班级类的相关文章

设计一个字节数组缓存类

转 http://blog.csdn.net/kakashi8841/article/details/42025367 版权所有,转载须注明出处! 1.为什么要 在做网络通信的时候,经常需要用到: 读:就是我们需要从网络流里面读取字节数据,并且由于分包的原因,我们需要自己缓存这些数据,而不是读完立刻丢掉. 写:我们需要把各种类型的数据变成字节写入.比如把int.string.short等变成字节数组写入流. 2.需要什么 我们需要设计一个类来实现: 支持可以不停地往这个类中添加字节 支持写入in

c++设计一个不能被继承的类,原因分析

用C++实现一个不能被继承的类(例1) #include <iostream> using namespace std; template <typename T> class Base{     friend T; private:     Base(){         cout << "base" << endl;     }     ~Base(){} }; class B:virtual public Base<B>

c++设计一个不能被继承的类

摘要:使用友元.私有构造函数.虚继承等方式可以使一个类不能被继承,可是为什么必须是虚继承?背后的原理又是什么? 用C++实现一个不能被继承的类(例1) 1 #include <iostream> 2 using namespace std; 3 4 template <typename T> 5 class Base{ 6 friend T; 7 private: 8 Base(){ 9 cout << "base" << endl; 1

用C++设计一个不能被继承的类(转)

在Java 中定义了关键字final,被final修饰的类不能被继承. 首先想到的是在C++中,子类的构造函数会自动调用父类的构造函数.同样,子类的析构函数也会自动调用父类的析构函数.要想一个类不能被继承,只要把它的构造函数和析构函数都定义为私有函数.那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数.析构函数而导致编译错误. 可是这个类的构造函数和析构函数都是私有函数了,怎样才能得到该类的实例呢?可以通过定义静态来创建和释放类的实例.基于这个思路,可以写出如下的代码: 1 /////

用C++ 设计一个不能被继承的类

http://blog.sina.com.cn/s/blog_69d9bff30100odlz.html 在Java 中定义了关键字final ,被final 修饰的类不能被继承.但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力. 首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数.同样,子类的析构函数也会自动调用父类的析构函数.要想一个类不能被继承,我们只要把它的构造函数和析构函 数都定义为私有函数.那么当一个类试图从它那继承的时候,必然会由于试图调用

设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。(Java语言)

这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这个类要提供以下的功能: double toDouble(); 将分数转换为double Fraction plus(Fraction r); 将自己的分数和r的分数相加,产生一个新的Fraction的对象.注意小学四年级学过两个分数如何相加的哈. Fraction multiply(Fraction r); 将自己的分数和r的分数相乘,产生一个新的Fraction的对象. void print(); 将

用C++实现一个不能被继承的类

一道笔试题的思考: 记得,找工作时,遇到了这样的一道笔试题.记不清是那个公司的笔试题,反正觉得自己当时还真费了一点功夫的,但是也就搞定了一部分,结果还是被另一部分给鄙视啦! 现在静下来分析实现如下: 题目:用C++设计一个不能被继承的类 不能被继承?不能被继承?不能被继承?按照继承的理论知识分析,我们只要把类的构造函数设置为私有的,即可解决问题. 因为那样的话,子类就没有办法访问基类的构造函数,从而就阻止了进行子类构造对象的任务实现,也就达到了不可继承的目的. 但是,假设那样,这个类我们在其它地

设计一个线程安全的单例(Singleton)模式

在设计单例模式的时候,虽然很容易设计出符合单例模式原则的类类型,但是考虑到垃圾回收机制以及线程安全性,需要我们思考的更多.有些设计虽然可以勉强满足项目要求,但是在进行多线程设计的时候.不考虑线程安全性,必然会给我们的程序设计带来隐患.此处,我们不介绍什么是单例模式,也不介绍如何设计简单的设计模式,因为你完全可以在书上或者在博客中找到.此处我们的目的就是设计一个使用的单例模式类.单例模式需要注意与思考的问题: (1)如何仅能实例化一个对象? (2)怎么样设计垃圾回收机制? (3)如何确保线程安全性

[JCIP笔记] (三)如何设计一个线程安全的对象

在当我们谈论线程安全时,我们在谈论什么中,我们讨论了怎样通过Java的synchronize机制去避免几个线程同时访问一个变量时发生问题.忧国忧民的Brian Goetz大神在多年的开发过程中,也悟到了人性的懒惰,他深知许多程序员不会在设计阶段就考虑到线程安全,只是假设自己的代码能按照自己的想法很好地运转.然而当程序上线.线程安全问题真的发生时,要花费多于前期设计数倍的时间和精力去进行排查.解决,甚至重新设计.于是,他在字里行间一直秉持一种"凡事皆可发生"的小心翼翼的哲学,并以这种哲学