一、变量的定义及用途
- 变量的定义:变量是指变化的量,量是指事物的状态,变量是用来记录事物变化的状态
- 变量的用途:变量是用来记录事物的状态,这个状态是可以变化的
name = 'egon' age = 18 sex = 'male' height = 1.87
二、变量的命名规范及方式
变量的命名规范要求做到见名知其意,在格式上有如下几点要求:
1、变量名只能是字母、数字、下划线的任意组合 2、变量名的第一个字符不嫩是数字 3、不能使用关键字作为变量名。常用的关键字如下: ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from','global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] 4、
变量的命名方式:
- 驼峰命名法:
AgeOfEgon = 18 SexOfEgon = 'male'
- 纯小写加下划线:
age_of_egon = 18 sex_of_egon = 'male' 在Python中推荐使用这种方法来命名变量
变量的三大特征:
- id
id 表示变量在内存中的唯一编号 >>> m = 10 >>> n = 12 >>> print(id(m),id(n)) 140717494736832 140717494736896
- type
type表示变量的类型 >>> age = 18 >>> name = 'egon' >>> height = 1.87 >>> print(type(age),type(name),type(height)) <class 'int'> <class 'str'> <class 'float'> >>>
- value
value 表示变量的值
id 相同,值一定相同;值相同,id不一定相同
>>> obj_1 = 'The age of egon' >>> obj_2 = 'The age of egon' >>> print(id(obj_1),id(obj_2)) 2835653209648 2835653582000 >>> >>> m = 12 >>> n = 12 >>> m is n True >>> 涉及到小整数池的概念 Python:-6~256 if obj_1 is obj_2 and obj_1 == obj_2: print(True)
常量:常量是指在程序运行的过程中不会发生改变的量
pi = 3.1415926
在Python中约定俗成,全部大写的变量名表示常量
三、垃圾回收机制
垃圾回收机制(GC)是Python解释器自带的一种用于回收不可用变量值所占用内存空间的机制
Python的GC模块通过使用引用计数(变量值被变量名关联的次数)来跟踪和回收垃圾
可以通过del 变量名来解除变量名与变量值的联系
四、基本数据类型
- 数字(int、float)
a = 5.026 b = 5.000 #保留两位小数方法 #1、round(num,n) print(round(a,2)) #5.03,这个得到的是float类型 #2、%方法 print(float('%.2f' % a)) #5.03,这个得到的是float类型 #3、 print('{x:.2f}'.format(x=a)) #5.03,这个得的是str
- 字符串
- 列表
- 字典
- 元组
- 布尔值
age = 18 height = 1.87 name = 'egon' info_list = ['egon',18,1.87] info_dict = {'name':'egon','age':18,'height':1.87} tuple = (1,3,5,7,9) True/False(多用于条件判断)
五、作业
- 认真读题,选择合适的类型加以存储
#1、病毒程序需要定期将监控到的数据写入日志文件,请记录下日志文件路径C:acadhsvc.dll.system32,方便后期处理 path_of_logfile = r'C:acadhsvc.dll.system32' #2、病毒程序在上传文件时,发送的报头数据里需要包含文件信息:文件名a.txt、大小360,请记录下文件信息 name_of_file = 'a.txt'
size_of_file = 360 #3、程序运行过程中有一段错误日志需要记录下来,错误日志为"上传文件失败" msg_of_errlog = '上传文件失败' #4、假设我收到一条信息要记录,信息为中病毒客户端的信息"[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据" info_of_client = '[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据' #5、把服务端ip地址存放下来,ip地址为10.0.10.11 address_of_ip = '10.0.10.11' #6、病毒程序需要每隔3秒才运行一次,请记录下这个时间间隔
time_of_execute = 3 - 嵌套取值操作
#1、students_info=[['egon',18,['play',]],['alex',18,['play','sleep']]] 请取出第一个学生的第一个爱好 hobby_of_first = students_info[0][2][0] #2、针对字典 info={ 'name':'egon', 'hobbies':['play','sleep'], 'company_info':{ 'name':'Oldboy', 'type':'education', 'emp_num':40, } } 请取出取公司名 name_of_company = info['company_info']['name'] or name_of_compay = info.get('company_info').get('name') #3、针对下述类型 students=[ {'name':'alex','age':38,'hobbies':['play','sleep']}, {'name':'egon','age':18,'hobbies':['read','sleep']}, {'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']}, ] 取第二个学生的第二个爱好 hobby_of_student = students[1]['hobbies'][1] or hobby_od_student = students[1].get('hobbies')[1]
- 附加题
功能需求: #1、输入账号密码完成验证,验证通过后输出"登录成功" #2、可以登录不同的用户 #3、同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁) #扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟 思路:1、利用文件来存储被锁定的账号 2、利用时间戳记录账号被锁定的时间 3、使用定时器来完成5分锁定 参考代码如下: #!/usr/bin/env python #-*- coding:utf-8 -*- #project:login #author:surpass_w import os import sys import time import subprocess from threading import Timer user_info = [{'account':'egon','password':'success888'}, {'account':'alex','password':'ok666abc'}, {'account':'surpass','password':'svipaa1'}] err_record = [{'account':'egon','record':0}, {'account':'alex','record':0}, {'account':'surpass','record':0}] lock_file = 'block_account.txt' class Login: def __init__(self,user_dict,err_dict,interval): self.user_dict = user_dict self.err_dict = err_dict self.interval = interval def login(self): count = 0 self.del_lock_account = [] while True: try: f = open(lock_file,'r+') except: cmd = 'touch %s chmod +x %s' % (lock_file,lock_file) subprocess.check_call(cmd,shell=True) f = open(lock_file,'r+') lock_user_list = f.readlines() self.lock_account_dict = {lock_user_list[i].replace(' ','').split(' ')[0] :lock_user_list[i].replace(' ','').split(' ')[1] for i in range(len(lock_user_list))} username = input('Please enter your account >>>:') if username in self.lock_account_dict.keys(): print('The account [%s] has been locked' % username) elif username in self.user_dict.keys(): password = input('Please enter your password >>>:') if password == self.user_dict.get(username): print('Welcome %s, a successful login!' % username) sys.exit(0) else: self.err_dict[username] += 1 if self.err_dict[username] == 3: lock_time = int(time.time()) self.del_lock_account.append(username) f.write(username+' '+str(lock_time)+' ') self.err_dict[username] = 0 print('The account [%s] is about to be locked' % username) self.t = Timer(self.interval,self.update_lock_file) self.t.start() else: print('Wrong password! You have 3 chances in all, remain %d.' %(3-self.err_dict[username])) else: count += 1 if count == 3: print('Enter invalid account 3 times, the system is shutdown!') sys.exit(0) else: print('The account [%s] does not exist! Please reenter, you have 3 chances'+ 'in all, remain %d.' % (3-count)) f.close() def update_lock_file(self): for i in range(len(self.del_lock_account)): if self.del_lock_account[i] in self.lock_account_dict.keys(): local_machine_time = int(time.time()) if (int(self.lock_account_dict.get(self.del_lock_account[i])) +300) == local_machine_time: del self.lock_account_dict[self.del_lock_account[i]] f1 = open(lock_file,'w') for k,v in self.lock_account_dict.items(): f1.write(k+' '+v+' ') f1.close() def main(): user_dict = {user_info[i].get('account'):user_info[i].get('password') for i in range(len(user_info))} err_dict = {err_record[j].get('account'):err_record[j].get('record') for j in range(len(err_record))} interval = 300 l = Login(user_dict,err_dict,interval) l.login() if __name__ == '__main__': main()