#1 构造方法的练习
# num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 学生编号
# new_list = []
# # print(num, type(num))
#
# # 定义一个类
# class Info:
# # name = input('请输入学生姓名')
# # age = input('请输入学生年龄')
# # address = input('请输入学生地址')
#
# def __init__(self, name, age, address):
# self.name = name
# self.age = age
# self.address = address
# #print(f'学生姓名:{self.name},年龄:{self.age},地址:{self.address}')
#
# for i in num:
# #类对象可以存放到列表里边
# new_list.append(Info(input('请输入学生姓名'), input('请输入学生年龄'), input('请输入学生地址')))
# print(f"学生{i+1}信息录入完成,信息为:【学生姓名:{new_list[i].name}】,年龄:{new_list[i].age},地址:{new_list[i].address}")
#2 魔术方法
# __init__ 构造方法
# __str__ 字符串方法
# __lt__ 小于、大于符号比较
# __le__ 小于等于、大于等于符号比较
# __eq__ ==符号比较
# 字符串方法
# class Info:
# def __init__(self, name, age, address):
# self.name = name
# self.age = age
# self.address = address
#
# def __str__(self):
# return f'Info类对象,name:{self.name}, age:{self.age}, address:{self.address})'
#
# def __lt__(self, other):
# return self.age < other.age
#
# def __le__(self, other):
# return self.age <= other.age
#
# def __eq__(self, other):
# return self.age == other.age
#
# stu1 = Info('zhangsan', 15, 'beijing')
# stu2 = Info('lisi', 15, 'beijing')
# print(stu1)
# print(stu1 < stu2)
# print(stu1 <= stu2)
# print(stu1 == stu2)
#3 类中的私有变量和方法
# class Temp:
# __current_temp = int(input('你当前的体温为'))
#
# def __do_not(self):
# print(f'体温为{self.__current_temp},超过37°')
#
# def yes(self):
# if self.__current_temp >= 37:
# self.__do_not()
# print('不能进入')
# else:
# print('欢迎光临')
# result = Temp()
# result.yes()
# 私有变量和方法的使用
# class Phone:
# #私有变量__is_5g_enable
# __is_5g_enable = bool()
# #私有成员方法__check_5g()
# def __check_5g(self):
# if self.__is_5g_enable == True:
# print('5g开启')
# else:
# print('5g关闭,使用4g网络')
# def call_by_5g(self):
# self.__check_5g()
# print('正在通话')
#
# result = Phone()
# result.call_by_5g()
#4 学习继承
# # 父类
# class Student():
# name = None
# age = None
#
# def __init__(self, name, age):
# self.name = name
# self.age = age
#
# # 子类
# class Student_new(Student):
# gender = None
#
# def __init__(self, gender):
# self.gender = gender
#
# stu1 = Student('张三', 15)
# stu2 = Student_new('male')
# print(stu2.name)
# #5 子类的覆写
# class Student:
# name = '张三'
# age = 15
# def stu_info(self):
# print(f'姓名为:{self.name}, 年龄为:{self.age}')
#
# #子类
# class New(Student):
# name = '李四' #覆写类Student中的name
# gender = 'male'
# def new_info(self):
# #print(f'姓名为:{self.name}, 年龄为:{self.age}')
# #覆写后调用父类
# #方法1
# # Student.stu_info(self)
# #方法2
# super().stu_info()
# print(f"性别为:{self.gender}")
#
# stu1 = New()
# stu1.new_info()
# print(New.gender)
# 6 类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显示的说明)
# 对函数形参和返回值的类型注解,对变量的类型注解
# 基础语法 变量:类型
# 也可用 #type: 类型
# my_list:list[int] = [1, 2]
# my_list.append('15')
# print(my_list)
# my_str = {'jintian', 'mintian'} # type: str
# print(my_str, type(my_str))
# #函数和方法的类型注解
# def result(x:int, y:int):
# return x+y
#
# a = result(1.5, 3)
# print(a)
#
# # 联合注解Union
# from typing import Union
#
# my_list: list[Union(int, float)] = [1, 1.2, 2]
#
# # 多态:多种状态
# class Animal:
# def speak(self):
# pass
#
# class Dog(Animal):
# def speak(self):
# print('汪')
#
# class Cat(Animal):
# def speak(self):
# print('喵')
#
# def make_nosie(animal):
# animal.speak()
#
# dog = Dog()
# cat = Cat()
#
# make_nosie(dog) #把子类当作了参数
# make_nosie(cat)
# L = [8, 2, 50, 3]
# LL = []
# for i in range(len(L)):
# max_value = max(L)
# max_index = L.index(max_value)
# LL.append(max_value)
# del L[max_index]
# print(L)
# print(LL)
# L = [8, 2, 50, 3]
# LL = []
# for i in range(len(L)):
# min_value = min(L)
# min_index = L.index(min_value)
# LL.append(min_value)
# del L[min_index]
# L = LL
# print(L)
a = {'a':1, 'd':2, 'b':4}
b = a.keys()
b =list(b)
b.sort()
# print(b.sort())
print(b)