python学习之变量&基本数据类型

大前提:编程语言的每一条基本语法都是为了让计算机实现人的某一种功能(即像人一样去干XXX)

1、变量

1.1 什么是变量

​ 解释一个词语有多种方法,而编程专业用词通常都是总结、精炼而来,因此编程专业用词的每一个字都是关键字,我们只要弄清楚每个字的意思,然后结合起来就可以了。

​ 变量的变指的是变化的意思,而量反应的可以是多少,可以是程度,也可以是描述的一种状态,

因此变量即事物变化的状态。

1.2为什么要有变量(变量的作用)

​ 前面我们说到变量即事物变化的状态,那为什么要有变量呢?我们可以举这样一个例子,比如说:昨天气温只有10度,我们会觉得很冷;今天气温20度,我们会觉得比较暖和;冷和暖的感觉就是我们身体记录气温的高低;而计算机可以通过10度、20度这样的量来记录气温的高低。很明显,10度、20度和人的冷、暖感觉对应起来,作用都是记录了气温的高低。因此,变量存在的意义就是为了让计算机能够像人一样去记录事物的状态(与大前提呼应)。

1.3如何用变量

​ 先定义,后引用。

·定义

name = 'egon'

​ 定义语句执行顺序:从右往左

·变量的三大组成部分

​ 等号"="右边:变量值,记录着事物的某个状态(在内存中开辟了一个小房间)

​ 等号"=":赋值符,把等号右边值的内存地址绑定给等号左边

​ 等号"="左边:变量名,指向等号右边值的内存地址,用来访问等号右边的值

·引用

print(name)

1.4变量的命名

1.4.1变量的命名规则

变量名的命名原则:在见名知意的前提下尽可能简洁

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']

注意事项:

1)变量名不要使用拼音,如:mingzi = 'egon'

2)变量名不要使用中文,如:名字 = egon

1.4.2变量名的命名风格

1)纯小写字母+下划线

age_of_alex = 73

2)驼峰体

AgeOfAlex = 73

在python中,建议使用第1)中风格命名变量,即纯小写字母+下划线的方式。

1.5变量值的三个重要特征

name = 'egon'

print(id(name))

id:反应的是变量值的内存地址,内存地址不同则id不同

print(type(name))

type:不同类型的值用来表示记录不同的状态

print(name)

value:值本身

1.6身份运算符is和比较运算符==

我们在python中编写程序会发现以下情况:

x = 'info:name:egon'

y = 'info:name:egon'

print(id(x),id(y))

print(x is y)

print(x==y)

首先我们定义了两个字符串变量x、y,组成x、y的字符是一模一样的,而id却是不一样的,从结果来看,'x is y'的输出结果为False,'x==y'输出的结果为True,因此:

身份运算符'is'比较的是两个变量所绑定的id是否相同;

比较运算符'=='比较的两个变量的值是否相同。

1.7小整数池

根据1.6的情况,编写以下内容:

x = 10

y = 10

print(id(x),id(y))

print(x is y)

print(x==y)

此时x和y的id竟然一模一样!这和1.6的结果完全不同!这是否意味着python语法是矛盾的?

其实这是python解释器的一个机制,叫做小整数池;从python解释器启动的那一刻起,就会在内存中事先申请好一系列内存空间存放好常用的整数,以此来提高python程序的运行效率;整数的范围为:[-5,256],在这个范围内的值的内存地址都是静态的,不会发生改变。

1.8常量

常量即不变的量,python语法中并没有常量的概念,但是在开发过程中会涉及到常量的使用;常量用一种约定俗成的方法定义,常量的变量名的所有字母都为大写字母,这只是一种约定和规范。

AGE_OF_ALEX = 73

print(AGE_OF_ALEX)

1.9内存管理机制

​ 内存管理机制即垃圾管理机制,是指python会自动将程序运行所产生的垃圾从内存中清理,从而缓解内存的压力的机制。

​ 首先我们来了解一下什么是python程序运行时产生的垃圾;如果一个值的内存地址绑定的变量名的个数为0个,则这个值就无法访问到(变量名是访问变量值的唯一方式),那么这个值就是垃圾

当内存中出现垃圾时,python就会自动启动垃圾管理机制,将内存释放。

·引用计数增加

​ 引用计数增加的操作:增加绑定变量值内存地址的变量名的个数,如:赋值操作

x = 10

x = y

x = z

	**·引用计数减少**

​ 引用计数减少的操作:较少绑定变量值内存地址的变量名的个数,如:'del'方法,变量名再赋值操作。

del x

del y

z = 2345

2、基本数据类型

2.1数字类型

2.1.1整型int

作用:记录年龄、个数、哪一年等等

定义:

age = 18

print(type(age))

2.1.2浮点型

作用:记录薪资、体重、薪水、价钱等等

定义:

salary = 1.8

weight = 75.5

height = 1.78

price = 1.88

print(type(salary))

数字类型的其他使用:

level = 1

level = level + 1

print(level)

print(10*3)

print(10+3.3)

age = 19

print(age>18)

2.2字符串类型str

作用:记录描述性质的状态,如名字,一段形容语句等等

定义:用引号(' '," ",''' ''',""" """)包含一串字符的形式

info = 'egon'

print(type(info))

print(info)

字符串的嵌套:使用单双引号进行一层一层的嵌套,也可使用转义字符''

print("my name is 'egon' ")

print('my name is \'egon\' ')

字符串的拼接:字符串可以使用+进行相加,但仅限于字符串和字符串之间

print('my name is ' + 'egon')

print('-'*20)

2.3列表list

索引对应值,索引从0开始,0点第一个。

作用:记录一系列同一类型的状态,如一个班级所有人的名字,一个人各个月的薪资,按照位置记录这些值,并且可以按照索引取指定位置的值。

定义:在[]内用逗号分隔开多个任意类型的值,一个值称之为一个元素。

hobbies = ['singing','play basketball','rap','dance','code']

print(hobbies[1])

print(hobbies[-1])

列表的索引是顺序,对值没有描述型说明,对于记录着不同状态的长列表,通过索引准确取到我们需要的值将十分困难。

2.4字典dict

字典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"])

2.5布尔类型bool

作用:用来记录真假这两种状态

定义:

egon_is_male = True

print(type(egon_is_male))

3、今日作业

一、数据类型的选择原则:存不是目的,目的是为了取,并且能够方便地取,请使用合适的类型与变量名记录下述状态

1.病毒程序需要定期将监控到的数据写入日志文件,请记录下日志文件路径C:\a\b\c\adhsvc.dll.system32,方便后期处理

字符串 log_path = r'C:\a\b\c\adhsvc.dll.system32'

​ python中有加反斜杠 \ 进行转义的情况,\a,\b为转义字符,因此在前面加r防止转义;加r是为了告诉编译器这个string是raw string,不要转义backflash ''。

2.病毒程序在上传文件时,发送的报头数据里需要包含文件信息:文件名a.txt、大小360,请记录下文件信息

字符串 file_name = 'a.txt'

整型 file_size = 360

3.程序运行过程中有一段错误日志需要记录下来,错误日志为"上传文件失败"

字符串 error_log = "上传文件失败"

4.假设我收到一条信息要记录,信息为中病毒客户端的信息"[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"

字符串 victm_info = "[2020-02-18-17:00:48] 癞蛤蟆病毒感染者-> 80.82.70.187:33649 正在上传数据"

5.把服务端ip地址存放下来,ip地址为10.0.10.11

字符串 serve_ip = '10.0.10.11'

6.病毒程序需要每隔3秒才运行一次,请记录下这个时间间隔

整型 wait_time = 3

二、嵌套取值操作

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.输入账号密码完成验证,验证通过后输出"登录成功"

user_info = ['vincent','888888']

name = input('请输入您的账号:')
pwd  = input('请输入您的密码:')
if name == user_info[0] and pwd == user_info[1]:
    print('登录成功。')
else:
    print('账号或密码错误,登录失败。')

2.可以登录不同的用户

user_info = {
    'vincent':'666666',
    'egon':'777777',
    'tank':'888888',
    'umi':'999999'
}

name = input('请输入您的账号:')
pwd  = input('请输入您的密码:')
#判断输入的账号是否存在
if name in user_info:
    #判断密码是否正确
    if pwd == user_info.get(name):
        print('登录成功。')
    else:
        print('密码错误,登录失败。')
else:
    print('您输入的账号不存在。')
3.同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)
扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟
user_info = {
    'vincent': {'pwd': '666666', 'count': 0},
    'egon': {'pwd': '777777', 'count': 0},
    'tank': {'pwd': '888888', 'count': 0},
    'umi': {'pwd': '999999', 'count': 0}
}
import os
import time
while True:
    name = input('请输入您的账号:')
    password = input('请输入您的密码:')
    # 判断输入的账号是否存在
    if name in user_info:
        # 判断密码是否正确
        if password == user_info.get(name).get('pwd'):
            #判断当前用户是否存在锁定信息
            if os.path.exists(name+'.txt'):
                f1 = open(name+'.txt','r',encoding='utf-8')
                lock_time = f1.read()
                f1.close()
                times = time.time()
                #判断当前时刻与被锁定时刻的时间差是否小于规定的锁定时间,如果小于,则继续锁定
                if times-float(lock_time)<=120:
                    print('您的账号已锁定,%ss后解锁。'%(int(120-(times-float(lock_time)))))
                    print('-'*20,end='')
                    time.sleep(int(120-(times-float(lock_time))))
                    print('账号锁定解除')
                    user_info[name]['count'] = 0
                    continue
                else:
                    print('登录成功。')
                    break
            else:
                print('登录成功。')
                break
        else:
            #密码错误则count数加1
            user_info[name]['count'] += 1
            print('密码错误,登录失败。')
            if user_info.get(name).get('count') >= 3:
                #当count数大于等于3时,锁定该账户
                print('3次或3次以上输入密码错误,账号已锁定。')
                print('-'*20,end = '')
                times = time.time()
                #将当前时间写入到txt文本中保存起来
                f1 = open(name+'.txt','w',encoding = 'utf-8')
                f1.write(str(times))
                f1.close()
                time.sleep(120)
                print('账号锁定解除')
                user_info[name]['count'] = 0
                continue
            else:
                continue
    else:
        print('您输入的账号不存在。')
posted @ 2020-03-04 21:30  慆慢险躁  阅读(286)  评论(0)    收藏  举报