# !/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2020/5/24 23:06
# @Author : "小多肉"
# @Email : 1021181701@qq.com
# @File : 属性访问机制和元类.py
# @Software: PyCharm
"""TODO:
第一题、自定义一个类
1、通过上课的相关知识点对这个类创建的对象,进行属性限制,对象只能设置这个三个属性: title money data
2、通过相关机制对设置的属性类型进行限制,title只能设置字符串类型数据
money设置为int类型数据 data可以设置为任意类型
3、通过相关机制实现,data 属性不能进行删除
4、当money设置的值少于0时,确保查询出来的值为0,
"""
print('-------------------第一题--------------------')
class AttrCtrl(object):
__slots__ =['title','money','data']
def __setattr__(self, key, value):
if key == 'title':
if isinstance(value,str):
super().__setattr__(key,value)
else:
raise AttributeError('title只能设置字符串类型数据')
elif key == 'money':
if isinstance(value,int):
super().__setattr__(key,value)
else:
raise AttributeError('money只能设置为int类型数据')
else:
super().__setattr__(key,value)
def __getattribute__(self, item):
if item == 'money':
value = super().__getattribute__(item)
if value < 0:
return 0
else:
return value
else:
return super().__getattribute__(item)
def __delattr__(self, item):
if item == 'data':
raise AttributeError('data不能删')
else:
super().__delattr__(item)
a = AttrCtrl()
a.money = 71
print(a.money)
a.money = -1
a.title = 'ppp'
a.data = 10
print(a.money)
print(a.data)
print(a.title)
try:
del a.data
except AttributeError as e:
print(e)
try:
a.title = 666
except AttributeError as e:
print(e)
try:
a.name = 2 # 报错,不存在
except AttributeError as e:
print(e)
"""
第二题:
有一艘船上有40个人,由于触礁出现了漏水,现在船上最多只能载20个人,需要20个人下船。
于是这40个人排成一队,根据站位,每个人领取了一个编号,从1开始到40。
然后从1开始到9进行循环报数,报数为9的人出列下船,一直循环,直到船上只剩下20人。
示例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19....40
第一次报到9下船的人,编号为9(1,2,3,...编号为9的人报9)
第二次下船的,编号为18,(10的人报1....18的人报9)
第三次下船的,编号为27 (19的人报1....27的人报9)
第四次下船,编号为36 (28的人报1....36的人报9)
第五次下船,编号为5 (37的人报1,38报2,39报3,40报4....5的人报9)
第六次下船,编号为15
.....
请问最后那些编号的人下船了?
"""
print('---------------第二题----------------------')
li = [i for i in range(1,41)]
leave = []
while len(li) > 20:
leave.append(li[8])
li = li[9::] + li[:8]
print("最后编号为以下列表中的人下船了:")
print(leave)