变量、基本数据类型的使用与今日作业

  变量
'''
一、什么是变量?

变量就是可以变化的量,量指的是事物的状态,比如人的年龄、性别,游戏角色的等级、金钱等等

二、为什么要有变量?
为了让计算机能够像人一样去记忆事物的某种状态,并且状态是可以发生变化的
详细地说:
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程

三、如何用变量
'''
# 1、变量基本使用
# 原则:先定义,后引用
# name = 'egon' # 定义-》存
# print(name) # 引用-》取

# age = 18
# print(age)

# 2、内存管理:垃圾回收机制
# 垃圾:当一个变量值被绑定的变量名的个数为0时,该变量值无法被访问到,称之为垃圾
# 引用计数增加
x = 10 # 10的引用计数为1
y = x # 10的引用计数为2
z = x # 10的引用计数为3

# 引用计数减少
del x # 解除变量名x与值10的绑定关系,10的引用计数变为2
# print(y)
del y # 10的引用计数变为1
# print(z)
z = 12345 # # 10的引用计数变为0
# print(z)

# 3、变量有三大组成部分
# I:变量名=》是指向等号右侧值的内存地址的,用来访问等号右侧的值
# II:赋值符号:将变量值的内存地址绑定给变量名
# III:变量值:代表记录的事物的状态

# 4、变量名的命名的规则
# 原则:变量名的命名应该见名知意
# 4.1. 变量名只能是 字母、数字或下划线的任意组合
# 4.2. 变量名的第一个字符不能是数字
# 4.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']
# age=18
# print='egon'

# ps:不要用拼音,不要用中文,在见名知意的前提下尽可能短
# mingzi='egon'
# 名字='egon'
# print(名字)

# 5、变量名的命名风格
# 5.1 纯小写加下划线的方式(在python中,关于变量名的命名推荐使用这种方式)
age_of_alex = 73
# print(age_of_alex)
# 5.2 驼峰体
AgeOfAlex = 73
# print(AgeOfAlex)

# 6、变量值三个重要的特征
# name='egon'
# id:反映的是变量值的内存地址,内存地址不同id则不同
# print(id(name))
# type:不同类型的值用来表示记录不同的状态
# print(type(name))
# value:值本身
# print(name)

# 6.2 is与==
# is:比较左右两个值身份id是否相等
# ==:比较左右两个值他们的值是否相等
'''
值相等,id可能不同,即两块不同的内存空间里可以存相同的值
>>>
>>> x='info:Egon:18'
>>> y='info:Egon:18'
>>> print(x,y)
info:Egon:18 info:Egon:18
>>> print(id(x),id(y))
4565819264 4566192176
>>>
>>>
>>>
>>> x == y
True
>>> x is y
False
'''

# 了解:小整数池[-5,256]
# 从python解释器启动那一刻开始,就会在内存中事先申请
# 好一系列内存空间存放好常用的整数
'''
>>> m=10
>>> n=10
>>> id(m)
4562619328
>>> id(n)
4562619328
>>>
>>> res=4+6
>>> res
10
>>> id(res)
4562619328
'''

'''
>>> x=-5
>>> y=-5
>>> x is y
True
>>> x=-6
>>> y=-6
>>> x is y
False
'''

'''
>>> x='aaa'
>>> y='aaa'
>>>
>>>
>>> id(x)
4566200880
>>> id(y)
4566200880
'''

'''
x=-6
y=-6
print(id(x))
print(id(y))
print(x is y)
'''

# 7、常量:不变的量
# 注意:python语法中没有常量的概念,但是在程序的开发过程中会涉及到常量的概念
# AGE_OF_ALEX = 73 # 小写字母全为大写代表常量,这只是一种约定、规范
# AGE_OF_ALEX = 74
# print(AGE_OF_ALEX)

基本数据类型
# 1、数字类型
# 1.1 整型int
# 作用:记录年龄、身份证号、个数等等
# 定义:
age = 18
# print(type(age))

# 浮点型float
# 作用:记录薪资、身高、体重
# 定义
salary = 3.3
height = 1.87
weight = 70.3
# print(type(height))

# 数字类型的其他使用
# level = 1
# level=level + 1
# print(level)
# print(10 *3)

# print(10 + 3.3) # int与float之间可以相加
# age = 19
# print(age > 18)


# 2、字符串类型str
# 作用:记录描述性质的状态,名字、一段话
# 定义:用引号('',"",''' ''',""" """,)包含的一串字符
info = '''
天下只有两种人。比如一串葡萄到手,一种人挑最好的先吃,
另一种人把最好的留到最后吃。
照例第一种人应该乐观,因为他每吃一颗都是吃剩的葡萄里最好的;
第二种人应该悲观,因为他每吃一颗都是吃剩的葡萄里最坏的。
不过事实却适得其反,缘故是第二种人还有希望,第一种人只有回忆。
'''
# print(type(info))
# name="egon"
# print(name)

# x=18
# print(type(x))
# x='18' # 由数字组成的字符串,是字符串类型,不是int类型
# print(type(x))

# 'name'='egon' # 语法错误,等号左边是变量名,变量名的命名不能有引号

# xxx # 代表访问变量名字
'xxx' # 代表的是值

# x=10
# y=x

# 其他使用:
# 字符串的嵌套,注意:外层用单引号,内存应该用双引号,反之亦然
# print("my name is 'egon'")
# print('my name is \'egon\'')

# 字符串之间可以相加,但仅限于str与str之间进行,
# 代表字符串的拼接,了解即可,不推荐使用,因为str之间的
# 相加效率极低
# print('my name is '+'egon')
# print('='*20)
# print('hello world')
# print('='*20)


# 3、列表:索引对应值,索引从0开始,0代表第一个
# 作用:按位置记录多个值(同一个人的多个爱好、同一个班级的所有学校姓名、同一个人12个月的薪资),并且可以按照索引取指定位置的值

# 定义:在[]内用逗号分隔开多个任意类型的值,一个值称之为一个元素
# 0 1 2 3 4
l = [10, 3.1, 'aaa', ['bbb', 'ccc'], 'ddd']
# print(l)
# print(l[1])
# print(l[2])
# print(l[3][1])

# print(l[4])
# print(l[-1])

# hobbies='read music play'
# print(hobbies)
# hobbies = ['read', 'music', 'play']
# print(hobbies[1])

# 其他的用途:
# students_info=[
# ['tony',18,['jack',]],
# ['jason',18,['play','sleep']]
# ]
# 取出第一个学生的第一个爱好
# print(students_info[0][2][0])


# 4、
# 索引反映的是顺序、位置,对值没有描述性的功能
# 0 1 2 3
info = ['egon', 18, 'male', 19]
# print(type(info))
# print(info[0])
# print(info[1])
# print(info[2])

# 字典类型:key对应值,其中key通常为字符串类型,所以key对值可以有描述性的功能
# 作用:用来存多个值,每个值都有唯一一个key与其对应,key对值有描述性功能
# 定义:在{}内用逗号分开各多个key:value
# d={'a':1,'b':2}
# print(type(d))
# print(d['a'])

# info={
# "name":'egon',
# "age":18,
# "gender":'male',
# "salary":19
# }
# print(info["salary"])

# 其他用途:
# students_info=[
# 第1个信息,
# 第2个信息,
# 第3个信息,
# ]

students_info = [
{"name": 'egon1', 'age1': 19, 'gender': 'male'},
{"name": 'egon2', 'age1': 19, 'gender': 'male'},
{"name": 'egon3', 'age1': 19, 'gender': 'male'},
]

print(students_info[1]['gender'])

# 5 布尔bool
# 6.1 作用
# 用来记录真假这两种状态
#
# 6.2 定义
# is_ok = True
# is_ok = False
# print(type(is_ok))

# x=1
# y=0

# students=[
# {'name':'egon','gender':'male'},
# {'name':'alex','gender':'female'},
# ]

# students=[
# {'name':'egon','gender':True},
# {'name':'alex','gender':False},
# ]

students = [
{'name': 'egon', 'gender': 1},
{'name': 'alex', 'gender': 0},
]

# 6.3 其他使用
# 通常用来当作判断的条件,我们将在if判断中用到它


# 总结:如何选择合适的类型来记录状态
# 1、选取的类型是否可以明确标识事物的状态
# 2、存不是目的,存的目的是为了日后取出来用,并且方便的用
# 3、把自己想象成一台计算机,如果我是计算机,
# 我会如何以何种形式把事物的状态记到脑子里
# 然后再去python中找相应的数据类型来让计算机像自己一样去记下事物的状态
作业
# 1、病毒程序需要定期将监控到的数据写入日志文件,请记录下日志文件路径C:\a\b\c\adhsvc.dll.system32,方便后期处理
path = r'C:\a\b\c\adhsvc.dll.system32'
print(path)
# 2、病毒程序在上传文件时,发送的报头数据里需要包含文件信息:文件名a.txt、大小360,请记录下文件信息
l = ['a.txt', 360]
print(l)
# 3、程序运行过程中有一段错误日志需要记录下来,错误日志为"上传文件失败"
error_log = '上传文件失败'
print(error_log)
# 4、假设我收到一条信息要记录,信息为中病毒客户端的信息"[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"
virus_info = '[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据'
print(virus_info)
# 5、把服务端ip地址存放下来,ip地址为10.0.10.11
ip = '10.0.10.11'
print(ip)
# 6、病毒程序需要每隔3秒才运行一次,请记录下这个时间间隔
time_interval = 3
print(time_interval)

# 二:嵌套取值操作
# 1、
students_info = [['egon', 18, ['play', ]], ['alex', 18, ['play', 'sleep']]]
# 请取出第一个学生的第一个爱好
print(students_info[0][2][0])

# 2、针对字典
info = {
'name': 'egon',
'hobbies': ['play', 'sleep'],
'company_info': {
'name': 'Oldboy',
'type': 'education',
'emp_num': 40,
}
}
# 请取出取公司名
print(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']},
]
# 取第二个学生的第二个爱好

print(students[1].get('hobbies')[1])

# 针对个别已经学了很多的同学,有如下选做题
# 选做题:编写用户登录接口(学的多的同学,尝试做下述作业,这是截止到下周二学完文件处理之后的作业)
# 1、输入账号密码完成验证,验证通过后输出"登录成功"
# username = input('请输入用户名:')
# password = input('请输入密码:')
# if username == 'mac' and password == '123':
# print('登陆成功')
# else:
# print('用户名或密码错误')
# 2、可以登录不同的用户
# user_info = {
# 'egon': '123',
# 'tank': '321',
# 'mac': '111'
# }
# while True:
# username = input('请输入用户名:')
# if username in user_info:
# print('%s用户存在' % username)
# password = input('请输入密码:')
# if password == user_info[username]:
# print('登陆成功')
# break
# else:
# print('用户名或密码错误')
# else:
# print('用户名不存在')

# 3、同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)
# 扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟
# user_info = {
# 'egon': '123',
# 'tank': '321',
# 'mac': '111'
# }
# import time
# count = 0
# tag = True
# while tag:
# username = input('请输入用户名:')
# if username in user_info:
# print('%s用户存在' % username)
# while count < 3:
# password = input('请输入用户密码:')
# if password == user_info[username]:
# print('登陆成功')
# tag = False
# break
# else:
# count += 1
# print('用户密码错误,剩余次数',3-count)
# else:
# print('用户被锁定,锁定时间5分钟')
# time.sleep(300)
# print('用户已解锁')
# count = 0
# else:
# print('用户名不存在')


# 扩展需求
user_info = {
'mac': {'pwd': '111', 'clocked': False},
'egon': {'pwd': '123', 'clocked': False},
'tank': {'pwd': '321', 'clocked': False},
}

import os
import time

count = 0
tag = True
while tag:
username = input('请输入用户名:')
# 判断用户名是否存在
if username in user_info:
print('%s用户存在' % username)
# 判断是否有用户被锁文件存在或者用户信息clocked是否为True
if user_info[username].get('clocked') or os.path.exists('%s.txt'% (username,)):
print(f'{[username]}用户需要锁定5分钟')
#程序睡五分钟
time.sleep(300)
#锁定完成后删除该用户被锁定文件
os.remove('%s.txt' % (username,))
print('%s用户已解锁' % (username,))
#将用户锁定信息clocked改为False
user_info[username]['clocked'] = False
count = 0
while count < 3:
password = input('请输入用户密码:')
# 判断该用户密码是否正确
if password == user_info[username].get('pwd'):
print('%s用户登录成功' % (username,))
tag = False
break
else:
count += 1
print('用户密码错误,剩余次数',3-count)
if count == 3:
print('%s用户被锁定' % (username,))
# 同一用户输错三次后,将该用户锁定信息clocked改为True
user_info[username]['locked'] = True
# 将用户锁定信息写入文件
with open('%s.txt'% (username,),'w', encoding='utf-8') as f:
f.write('%s用户被锁定' % (username,))
else:
print('用户名不存在')
 

猜你喜欢

转载自www.cnblogs.com/h1227/p/12410246.html