Property Exercise

要求一:自定义用户信息数据结构,写入文件,然后读出内容,利用eval重新获取数据结构
 3 with open(‘user.db‘,‘w‘) as write_file:#创建并以写入的方式打开一个文件user.db
 4     write_file.write(str({
 5         "egon":{"password":"123",‘status‘:False,‘timeout‘:0},
 6         "alex":{"password":"456",‘status‘:False,‘timeout‘:0},
 7         }))#在user.db中加入两个用户信息以字典的方式储存
 8
 9 with open(‘user.db‘,‘r‘) as read_file:#以只读的方式打开一个文件user.db
10     data=read_file.read()#读取user.db中的数据
11     d=eval(data)#将user.db中的数据转为字典
12     print(d[‘egon‘][‘password‘])#打印字典中egon的password 对应value
13     print(d[‘egon‘][‘status‘])
14     print(d[‘egon‘][‘timeout‘])
求二:定义用户类,定义属性db,执行obj.db可以拿到用户数据结构
 3 class User: #定义User类
 4     db_path=‘user.db‘
 5     def __init__(self,username): #在实例化User类时,传入Username参数的值
 6         self.username=username
 7     @property#将db()方法作为属性,让用户调用
 8     def db(self):
 9         data=open(self.db_path,‘r‘).read()#以只读的方式打开文件user.db
10         return eval(data)#以字典的方式返回user.db中的内容
11 u=User(‘egon‘)#实例化对象u,传入egon
12 print(u.db[‘egon‘])#打印又u.db()返回的字典中,对应egon的value
13 print(u.db[‘egon‘][‘password‘])#打印又u.db()返回的字典中,对应egon的password,value
求三:分析下述代码的执行流程
 3 import time
 4 class User:#定义User类
 5     db_path=‘user.db‘
 6     def __init__(self,name): #在实例化User类时,传入name参数的值
 7         self.name=name
 8     @property#将db()方法作为属性,让用户调用,同时产生db.setter和db.del方法
 9     def db(self):
10         with open(self.db_path,‘r‘) as read_file:#当调用db方法时,打开文件user.db
11             info=read_file.read()
12             return eval(info)#以字典的方式返回user.db中的用户信息
13     @db.setter#在对db属性进行修改操作的时候,调用此方法
14     def db(self,value):
15         with open(self.db_path,‘w‘) as write_file:#创建并打开一个文件user.db
16             write_file.write(str(value))#在文件中写入db属性得到的值
17             write_file.flush()#刷新文件的缓冲区域,让数据立刻写入文件
18     def login(self): #定义login方法
19         data=self.db#data得到db方法(现在被@property修饰过的属性)返回的user.db中的数据
20         if data[self.name][‘status‘]:#判断name的status字段是否为Ture
21             print(‘已经登录‘)
22             return True
23         if data[self.name][‘timeout‘] < time.time(): #判断name的timeout字段值是否小于....呃~1970年到现在的时间
24             count=0
25             while count < 3:
26                 passwd=input(‘password>>: ‘)#输入密码
27                 if not passwd:continue#如果密码为空,那么重新循环到输入密码
28                 if passwd == data[self.name][‘password‘]: #输入密码正确
29                     data[self.name][‘status‘]=True#更改用户的登陆状态
30                     data[self.name][‘timeout‘]=0#超时字段归0
31                     self.db=data#将改写过的值重新调用db.setter方法存入user.db文件中,在用户看来就是对db属性进行了重新的赋值操作
32                     break
33                 count+=1#只允许用户输入三次错误的机会
34             else:
35                 data[self.name][‘timeout‘]=time.time()+10#如果三次输入错误,那么该用户将被锁定10秒
36                 self.db=data#将改写过的值重新调用db.setter方法存入user.db文件中,在用户看来就是对db属性进行了重新的赋值操作
37         else:#如果判断用户的timeout大于1970年到现在的值
38             print(‘账号已经锁定10秒‘)
39
40 u1=User(‘egon‘) #实例化u1传入name,egon
41 print("egon login:")
42 u1.login()#u1调用login的方法
四:根据上述原理,编写退出登录方法(退出前要判断是否是登录状态),自定义property,供用户查看自己账号的锁定时间
 3 import time
 4 class User:#定义User类
 5     db_path=‘user.db‘
 6     def __init__(self,name): #在实例化User类时,传入name参数的值
 7         self.name=name
 8         print("%s Login:"%self.name)
 9     @property#将db()方法作为属性,让用户调用,同时产生db.setter和db.del方法
10     def db(self):
11         with open(self.db_path,‘r‘) as read_file:#当调用db方法时,打开文件user.db
12             info=read_file.read()
13             return eval(info)#以字典的方式返回user.db中的用户信息
14     @db.setter#在对db属性进行修改操作的时候,调用此方法
15     def db(self,value):
16         with open(self.db_path,‘w‘) as write_file:#创建并打开一个文件user.db
17             write_file.write(str(value))#在文件中写入db属性得到的值
18             write_file.flush()#刷新文件的缓冲区域,让数据立刻写入文件
19     @property
20     def UserLockTime(self):
21         return int(self.db[self.name]["timeout"]-time.time())
22     def loginOut(self):
23         data = self.db
24         if(data[self.name][‘status‘]):
25             print(self.name, "正在登出.....")
26             data[self.name][‘status‘] = False
27             self.db = data
28             time.sleep(2)
29             print(self.name,"登出成功!")
30         else:
31             print(self.name,"并没有登陆")
32     def login(self): #定义login方法
33         data=self.db#data得到db方法(现在被@property修饰过的属性)返回的user.db中的数据
34         if data[self.name][‘status‘]:#判断name的status字段是否为Ture
35             print(‘已经登录‘)
36             return True
37         if data[self.name][‘timeout‘] < time.time(): #判断name的timeout字段值是否小于....呃~1970年到现在的时间
38             count=0
39             while count < 3:
40                 passwd=input(‘password>>: ‘)#输入密码
41                 if not passwd:continue#如果密码为空,那么重新循环到输入密码
42                 if passwd == data[self.name][‘password‘]: #输入密码正确
43                     data[self.name][‘status‘]=True#更改用户的登陆状态
44                     data[self.name][‘timeout‘]=0#超时字段归0
45                     self.db=data#将改写过的值重新调用db.setter方法存入user.db文件中,在用户看来就是对db属性进行了重新的赋值操作
46                     print("欢迎%s登陆,马上为您进行登出服务"%self.name)
47                     time.sleep(3)
48                     break
49                 count+=1#只允许用户输入三次错误的机会
50             else:
51                 data[self.name][‘timeout‘]=time.time()+180#如果三次输入错误,那么该用户将被锁定180秒
52                 self.db=data#将改写过的值重新调用db.setter方法存入user.db文件中,在用户看来就是对db属性进行了重新的赋值操作
53         else:#如果判断用户的timeout大于1970年到现在的值
54             print(‘账号已经锁定180秒,剩余%s秒‘%self.UserLockTime)
55 u1=User(‘egon‘) #实例化u1传入name,egon
56 u1.login()#u1调用login的方法
57 u1.loginOut()#u1调用loginOut方法
58 u2=User(‘alex‘)
59 u2.login()
				
时间: 2024-10-03 14:14:52

Property Exercise的相关文章

Extending JMeter – Creating Custom Config Element – Property File Reader

JMeter is one of the best open source tools in the Test Automation Community. It comes with all the possible extensions to come up with our test scripts quickly. To make our life even more easier, It also lets us to come up with our own plugins by im

Property Finder – a Cross-Platform Xamarin MonoTouch Mobile App

Developers are now finding themselves having to author applications for a diverse range of mobile platforms (iOS, Android, Windows Phone, …), each of which have their own ‘native’ development languages, tools and environment. There is an ever growing

python中的property

property(fget=None, fset=None, fdel=None, doc=None) -> property attribute fget is a function to be used for getting an attribute value, and likewise fset is a function for setting, and fdel a function for del'ing, an attribute. Typical use is to defi

Cannot read property &#39;Store&#39; of undefined nodejs express session

Express在使用mongodb的时候app配置出错!  "Cannot read property 'Store' of undefined" 原因主要是express版本4++问题 //settings.js module.exports={ cookieSecret:"xxxx", db:"dbname", host:"localhost", } //app.js var express = require("

uva 10526 - Intellectual Property(后缀数组)

题目链接:uva 10526 - Intellectual Property 题目大意:给定两个文本,问说下面一个文本中在哪些位置上抄袭了上面个一个文本的,输出n个抄袭位置(不足n个情况全部输出),按照长度优先输出,长度相同的输出位置靠前的. 注意:空格,回车都算一个字符:一段字符只能是抄袭上面的一部分,比如上:NSB*SB 下:NSB 答案:NSB. 解题思路:将两个文本连接在一起,中间用没有出现的字符分割,然后处理处后缀数组,根据height数组的性质,求出哪些位置匹配的长度不为0(注意匹配

webpack报错:Cannot assign to read only property &#39;exports&#39; of object &#39;#&lt;Object&gt;&#39;

这个倒霉错误在mac电脑上开发的时候非常顺利,可是用windows的时候就会报错. 百度查不到,google一查果然有. 原因是:The code above is ok. You can mix require and export. You can't mix import and module.exports. 也就是说,在webpack打包的时候,可以在js文件中混用require和export.但是不能混用import 以及module.exports. 于是查了一下代码,在自己的ma

JavaScript中的property和attribute的区别

时间: 2013-09-06 | 10:24 作者: 玉面小飞鱼 分类: DOM, js相关, 前端技术 2,222 次浏览 1. 定义 Property:属性,所有的HTML元素都由HTMLElement类型表示,HTMLElement类型直接继承自Element并添加了一些属性,添加的这些属性分别对应于每个HTML元素都有下面的这5个标准特性: id,title,lang,dir,className.DOM节点是一个对象,因此,他可以和其他的JavaScript对象一样添加自定义的属性以及方

staticmethod classmethod property方法

@staticmethod 静态方法 函数修饰符,用来修饰一个函数,类似于装饰器 class Dog(object): def __init__(self,name): self.name = name def eat(self,food): print('%s is eating %s'%(self.name,food)) d = Dog('二哈') d.eat('包子') #二哈 is eating 包子 eat()方法上面加上 @staticmethod class Dog(object)

Angular4 - Can&#39;t bind to &#39;ngModel&#39; since it isn&#39;t a known property of &#39;input&#39;.

用[(ngModel)]="xxx"双向绑定,如:控制台报错:Can't bind to 'ngModel' since it isn't a known property of 'input'.   解决办法:在app.module.ts文件中导入FormsModule Angular4 - Can't bind to 'ngModel' since it isn't a known property of 'input'.