一.编程与编程语言
编程的目的是将人类的思想流程按照某种能够被计算机识别的表达方式传递给计算机,从而让计算机能像人脑一样自动执行工作。
能被计算机所识别的表达方式是编程语言,python就是一门编程语言。
二. 编程语言分类
- 机器语言:优点是最底层,执行速度最快;缺点是最复杂,开发效率最低。
- 汇编语言:优点是比较底层,执行速度较快;确定是复杂,开发效率较低。
- 高级语言:a. 编译型语言:C语言,优点执行速度快,不依赖语言环境运行;缺点跨平台差
b. 解释型语言:Python, Perl, Shell语言,优点跨平台好,一份代码到处可用;缺点执行速度慢,依赖解释器运行
规律:学习难度从高到低,执行效率从高到低,开发效率从低到高
总结:速度不是关键(瓶颈理论),开发效率高才是王道
运行python程序的两种方式:
1.交互式:python>>
2.python3 test.py, 执行python程序的三个阶段:
a. 先启动python解释器
b.python解释器将test.py的内容当作普通话字符读入内存
c.python解释器解释执行读取的内容,识别python的语法
三.变量
变量:
即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态
定义变量:
变量名=变量值
变量值:记录现实世界中的状态
=:将变量值的内存地址绑定给变量名
变量名:用来找到变量值
name='andy'
print(name)
变量的定义规范:
- 变量名只能是字母,数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 关键字不能声明为变量
定义的方式:
- 驼峰体:AgeOfAndy
- 下划线(推荐):age_of_andy
定义变量的三个特征:
- id: id相同,意味着type和value肯定相同
- type
- value:value相同type肯定相同,但id可能不同
常量:不会改变的量,常用全大写表示,如 ANDY_OF_AGE
四.用户与程序交互
#Python3:
input, 用户输入的任何值,都存成字符串类型。
#Python2:
input, 用户输入什么类型,就存成什么类型。
raw_input, 同python3中的input
注释:
单行注释用#
多行注释用三对双引号""" """
文件头:
#!/usr/bin/env python
#-*- coding: utf-8 -*-
五.基本数据类型(Type)
- 数字:#int整形 #float浮点型
- 字符串:python中加了引号的字符就是字符串类型,字符串可以进行“相加”和“相乘”运算
- 列表:在[ ]内用逗号分隔,可以放n个任意类型的值。 info=['andy','29','180']
- 字典:在{ }内用逗号分隔,可以放n个key:value的值, value可以是任意类型。 info={'name':'andy','age':29,'high':180}
- 布尔:True或False。所有数据类型都自带布尔值,None,0和空三种情况下布尔值均为False, 其余值为True
六.格式化输出
- %s字符串占位符:可以接收字符串,也可以接收数字
- %d数字占位符:只能接收数字
#接收用户输入,打印成指定格式
name=input('your name: ')
age=input('your age: ') #用户输入18,会存成字符串18,无法传给%d
print('My name is %s,my age is %s' %(name,age))
#注意:
#print('My name is %s,my age is %d' %(name,age)) #age为字符串类型,无法传给%d,所以会报错
七.基本运算符
- 算数运算: + - * / % ‘’ //
- 比较运算:== != <> > < >= <=
- 赋值运算: = += -= *= /= %= ''= //= ; 交叉赋值:m,n=n,m ;变量的解压:x,y,z=[1,2,3] x,*_,z=[1,2,3,4,5,6]
- 逻辑运算: and or not
- 身份运算: is比较的是id, ==比较的是值
八.控制流程之if...else
语法1:
if 条件1:
code1
code2
code3
...
语法2:
if 条件1:
条件成立时执行的子代码块
code1
code2
code3
...
else:
条件不成立时执行的子代码块
code1
code2
code3
Sample:
'''
如果:成绩>=90,那么:优秀
如果成绩>=80且<90,那么:良好
如果成绩>=70且<80,那么:普通
其他情况:很差
'''
score=input('your score>>: ')
score=int(score)
# print(type(score))
if score >= 90:
print('优秀')
elif score >=80 :
print('良好')
elif score >=70:
print('普通')
else:
print('很差')
九.控制流程之while循环
1.while 条件:
#循环体
#如果条件为真,那么循环体则执行,执行完毕后再次循环,重复判断条件。。。
#如果条件为假,那么循环体不执行,循环终止
2.死循环:
while True:
code1...
3.循环嵌套与tag
tag=True
while tag:
code ...
while tag:
code ...
tag=False
4.break与continue
while+break: 结束当前循环,执行循环外的代码
while+continue:结束当前循环并继续下一次循环;注意:continue不要放在循环体的下一步,无意义
十.控制流程之for循环
1. 迭代式循环:for
for i in range(10):
code
2.break与continue(同上)
十一.练习
基础需求:
- 让用户输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后退出程序
升级需求:
- 可以支持多个用户登录 (提示,通过列表存多个账户信息)
- 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
Code:
dic={
'andy1':{'password':'123','count':0},
'andy2':{'password':'123','count':0},
'andy3':{'password':'123','count':0},
}
tag=True while tag:
name=input('Please input username>>: ')
if name not in dic:
print('输入的用户'+name +'不存在,请重新输入')
else:
with open('lock_list.txt','r') as f:
lock_users=f.read().split('|')
if name in lock_users:
print('输入的用户'+name+'已被锁定')
tag=False
break
while tag:
if dic[name]['count'] > 2:
print('尝试次数过多,账户锁定')
fp = open('lock_list.txt','a')
fp.write('%s|' %name)
fp.close
tag=False
break
password = input('Please input password>>: ')
if password == dic[name]['password']:
print('登陆成功')
while tag:
cmd=input('cmd>>>:')
if cmd == 'q' or cmd == 'exit':
tag=False
break
print('命令[%s]运行' %cmd)
else:
print('密码错误,请重新输入')
dic[name]['count'] += 1