python介绍:
1.编程与编程语言
Python是一种解释型编程语言
1) 编程的目的
将人的思想以计算机能够理解的方式传达给计算机,从而使计算机代替人去工作
2) 什么是编程语言
能够被计算机理解的语言就是编程语言
3) 什么是编程
编程即程序员根据需求把自己的思想流程按照某种编程语言的语法风格编写下来,产出的结果就是包含一堆字符的文件。
强调:程序在未运行前跟普通文件无异,只有程序在运行时,文件内所写的字符才有特定的语法意义
2.编程语言分类
1) 机器语言:二进制编程,直接操作硬件
2) 汇编语言:英文标识符取代二进制编写程序,本质还是操作硬件
3) 高级语言:在使用者的角度编程的语言
高级语言分类:
编译型:需要编译器,写完一次性翻译,执行速度快,调试麻烦,类似翻译软件,
解释型:需要解释器,写一句翻译一句,执行速度慢,调试方便,相当于同声翻译
3.开始python
3.1第一个python程序
#文件头:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print(‘hello,world’)
注释:
代码注释分单行和多行注释, 单行注释用#,多行注释可以用三对单引号或者双引号""" """
3.2python运行的两种方式
1) 命令行:python +需要执行的代码
特点:会立即看到效果,用于代码调试,写到内存中,不会永久保存
2) 写到文件里面:python +执行文件的位置
特点:可以永久保存。
过程:1.启动python解释器
2.将内容从硬盘读取到内存中
3.执行python代码
(再次强调:程序在未运行前跟普通文件无异,只有程序在运行时,文件内所写的字符才有特定的语法意义)
4.变量
4.1 变量含义
变化的量,衡量状态
4.2 变量存在意义
程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。
4.3定义变量及其规范
4.3.1变量构成及特征
构成:变量名、=(赋值)、变量值
例如:name=xiaoming
变量三个特征:id,type,value
4.3.2变量的定义规范
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.3.5变量的定义方式
驼峰体:
如;AgeOfOlboy=18
下划线(推荐):
如:age_of_oldboy=18
5.用户与程序交互
#!/usr/bin/env python#coding:utf-8#在python3中的input:无论用输入何种类型,都会存成字符串类型name=input('please input your name: ') #name='18'print(id(name),type(name),name)
在python2中
raw_input与python3的input是一样的
name=raw_input('please input your name:')print(id(name),type(name),name)
#python2中input,用户必须输入值,输入的值是什么类型,就存成什么类型
name=input('please input your name:')print(id(name),type(name),name)
6.数据类型:
什么是数据?为何要有多种类型的数据?
#数据即变量的值,如age=18,18则是我们保存的数据。
#变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识
6.1数字
int整型:年纪,身份证号,qq号,等级
#age=18 #age=int(18)
#float浮点型:身高,体重,薪资
height=1.81
height=float(1.81)
print(type(height),height)
6.2字符串类型
字符串:把一对字符放到单引号或者双引号或者三引号中
#字符串:表示一些描述性状态,人的名字,人的性别
#name="egon" #name=str("egon")#print(type(name))
'''注释内容'''
#字符串拼接:
#1 只能字符串之间拼接
#2 字符串之间只能用+或*
#name='egon'#msg='hello'#age=18#print(name+msg+str(age))#
#print(name*10)
6.3列表:
定义在[]内,用逗号分隔开的多个元素,每个元素可以是任意类型
#表示:存取放多个值,比如存放人的爱好,人的信息,
hobbies=['play','read','music','movie'] #hobbies=list(['play','read','music','movie'])print(type(hobbies))print(hobbies[3])print(hobbies[0])print(hobbies[-1])print(hobbies[10])
l=[1,1.3,'egon',['a','b']]print(l[3][1])
# id name sex hobbiesinfo=[12312312321312,'egon','male',['read','music',]]print(info[3][1])print(info[1])
6.4字典:
定义的{}内,用key=value形式表示一个元素,用逗号分隔开
#info={'name':'egon','id':12312312321312,'sex':'male','hobbies':['read','music',]}
print(info['name'])print(info['hobbies'][1])
6.5布尔类型:
print(type(True))
AGE=73age=18
print(age >AGE)print(age < AGE)
7.格式化输出:
程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式
比如要求用户输入用户名和年龄,然后打印如下格式:
My name is xxx,my age is xxx.
很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。
这就用到了占位符,如:%s、%d
print('My name is %s,my age is %d'%('egon',18))
练习:用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Egon -----------Name : Egon
Age :22Sex : male
Job : Teacher------------- end -----------------
#实现:
name=input('print your name:')
age=input('print your age:')
sex=input('print your sex')
job=input('print your job')
msg='''------------ info of Egon -----------
Name : %s
Age : %s
Sex : %s
Job : %s
------------- end -----------------'''%(name,age,sex,job)print(msg)
8.基本运算符:
8.1.运算
a=10 b=20
8.2比较运算
8.3赋值运算
8.4逻辑运算
8.5成员运算
8.6身份运算
8.7运算符
异或,相同为0,不同为1
按位取反:0换1,1换0
移动就是移动的二进制位置,数字定义位移多少,一位就是除以2或者乘以2,
9.流程控制只if...else
既然我们编程的目的是为了控制计算机能够像人脑一样工作,那么人脑能做什么,就需要程序中有相应的机制去模拟。人脑无非是数学运算和逻辑运算,对于数学运算在上一节我们已经说过了。对于逻辑运算,即人根据外部条件的变化而做出不同的反映,比如
1 如果:女人的年龄>30岁,那么:叫阿姨
age_of_girl=31
if age_of_girl > 30:print('阿姨好')
2 如果:成绩>=90,那么:优秀
如果成绩>=80且<90,那么:良好
如果成绩>=70且<80,那么:普通
其他情况:很差
if条件1:
缩进的代码块elif条件2:
缩进的代码块elif条件3:
缩进的代码块
......else:
缩进的代码块
10.流程控制只while循环
10.1 .循环语法
while条件:#循环体
#如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。
#如果条件为假,那么循环体不执行,循环终止
10.2.海枯石烂死循环
importtime
num=0whileTrue:print('count',num)
time.sleep(1)
num+=1
10.3.循环嵌套与tag
tag=Truewhiletag:
......whiletag:
........whiletag:
tag=False
#练习,要求如下:
1 循环验证用户输入的用户名与密码
2 认证通过后,运行用户重复执行命令
3 当用户输入命令为quit时,则退出整个程序
#实现一:
name='egon'password='123'
whileTrue:
inp_name=input('用户名:')
inp_pwd=input('密码:')if inp_name == name and inp_pwd ==password:whileTrue:
cmd=input('>>:')if not cmd:continue
if cmd == 'quit':break
print('run <%s>' %cmd)else:print('用户名或密码错误')continue
break
#实现二:使用tag
name='egon'password='123'tag=Truewhiletag:
inp_name=input('用户名:')
inp_pwd=input('密码:')if inp_name == name and inp_pwd ==password:whiletag:
cmd=input('>>:')if not cmd:continue
if cmd == 'quit':
tag=Falsecontinue
print('run <%s>' %cmd)else:print('用户名或密码错误')
10.4.break与continue:
break:跳出本层循环
continue:跳出本次循环
10.5. while else
#与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句,while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
count =0while count <= 5:
count+= 1
print("Loop",count)else:print("循环正常执行完啦")print("-----out of while loop ------")
输出
Loop1Loop2Loop3Loop4Loop5Loop6循环正常执行完啦-----out of while loop ------
#如果执行过程中被break啦,就不会执行else的语句啦
count =0while count <= 5:
count+= 1
if count == 3:break
print("Loop",count)else:print("循环正常执行完啦")print("-----out of while loop ------")
输出
Loop1Loop2
-----out of while loop ------
10.6 while循环练习题
#练习题1:循环输出1 2 3 4 5 6 8 9 10
count=1
while count <= 10:while count==7:
count+=1
continue
print(count)
count+= 1
#练习题2:求1-100的所有数的和
count=1sum=0while count<=100:
sum= sum + count #sum+=count
count += 1
if count==100:
sum= sum +countprint(sum)#练习题3:输出 1-100 内的所有奇数
count=1
while count <=100:if count%2 !=0:print(count)
count+=1
#练习题4:输出 1-100 内的所有偶数
count=1
while count <=100:if count%2 ==0:print(count)
count+=1
#练习题5:求1-2+3-4+5 ... 99的所有数的和
count=1res=0while count<=100:if count%2 ==0:
res+=countelse:
res-=count
count+=1
print(res)#练习题6:猜年龄#要求:
#允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退出
age=18count=0while count <3:
guess_num= int(input('num>>'))if guess_num==age:print('good job')break
elif guess_num<18:print('too small,think bigger')else:print('too big,think smaller')
count+=1
#8:猜年龄游戏升级版#要求:#允许用户最多尝试3次#每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y, 就继续让其猜3次,以此往复,如果回答N或n,就退出程序#如何猜对了,就直接退出
age=18count=0
tag=Truewhiletag:if count==3:
con=input('do you want to continue? please input Y(y) or N(n)')if con=='Y' or con=='y':
count=0elif con=='N' or con=='n':
tag=Falsecontinue
else:print('please input Y/y or N/n')
count=3
continueguess_num=int(input('猜数字>>'))if guess_num==age:print('good job')break
elif guess_num<18:print('too small,think bigger')else:print('too big,think smaller')
count+=1
11.流程控制for循环
1 迭代式循环:for,语法如下
for i in range(10):
缩进的代码块
2 break与continue(同上)
3 循环嵌套
for i in range(1,10):for j in range(1,i+1):print('%s*%s=%s' %(i,j,i*j),end=' ')print()
12 练习
12.1 练习1
#1.1 练习题#
#简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释型
'''编译型:需要编译器,写完一次性翻译,执行速度快,调试麻烦,类似翻译软件,
解释型:需要解释器,写一句翻译一句,执行速度慢,调试方便,相当于同声翻译
编译型语言:C/C++/
解释型语言:python/java/C#'''
#执行 Python 脚本的两种方式是什么
'''1) 命令行:python +需要执行的代码
特点:会立即看到效果,用于代码调试,写到内存中,不会永久保存
2) 写到文件里面:python +执行文件的位置
特点:可以永久保存。
过程:1.启动python解释器
2.将内容从硬盘读取到内存中
3.执行python代码'''
#Pyhton 单行注释和多行注释分别用什么?
'''单行注释:#
多行注释为三个单引号或者双引号'''
#布尔值分别有什么?#布尔值有True和False
#声明变量注意事项有那些?
'''变量名只能是 字母、数字或下划线的任意组合
变量名的第一个字符不能是数字
关键字不能声明为变量名['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']
变量命名方式:驼峰体和下划线(推荐)'''
#如何查看变量在内存中的地址?#a=2#print(id(a))
#写代码#实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!
'''user='seven'
passwd=123
u=input('username>>')
p=int(input('password>>'))
if user == u and passwd == p:
print('successful login')
else:
print('failed login ')'''
#实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
'''user='seven'
passwd=123
count=0
while True:
if count==3:
break
u=input('username>>')
p=int(input('password>>'))
if user == u and passwd == p:
print(' login successful')
break
else:
print(' login failed ')
count+=1'''
#实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次#写代码
'''count=0
while True:
if count==3:
break
user =input("username>>")
passwd = int(input('passwd>>'))
if user=='alex' or user=='seven'and passwd==123:
print(' login successful ')
break
else:
print('login failed')
count+=1'''
#a. 使用while循环实现输出2-3+4-5+6...+100 的和#'''count=2
res=0
while count<=100:
if count%2 ==0:
res+=count
else:
res-=count
count+=1
print(res)'''
#b. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 使用 while 循环实现输出 1-100 内的所有奇数#'''1)
count=1
while count<=12:
if count == 6:
count += 1
continue
print(count)
count+=1'''
'''2)
count=1
while count<101:
if count%2 !=0:
print(count)
count+=1'''
#e. 使用 while 循环实现输出 1-100 内的所有偶数#'''count=1
while count<101:
if count%2 ==0:
print(count)
count+=1'''
#现有如下两个变量,请简述 n1 和 n2 是什么关系?#
#n1 = 123456#n2 = n1
'''n1和n2的值相同,id(内存空间)不同'''
12.2 练习2:
基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
#判断黑名单文件是否存在,若不存在则创建
importosimportsys
file=os.path.exists('E:\lock_user.txt')if file==True:print('back_user files exists')else:
f=open('E:\lock_user.txt','w')
dict={'egon':'123','alex':'234','qiaolu':'345'}#try:#f = open('E:\lock_user.txt','r')#print(f.read())#finally:#if f:#f.close()#with open('E:\lock_user.txt', 'r') as f:#print (f.read())
count=0
tag=Truewhiletag:if count==3:
with open('E:\lock_user.txt', 'a') as f:#print(f.read())
line = '\n'f.write(line)
f.write('%s|%s' %(user, passwd))print('too many tries,your username has been locked')
tag=Falsebreak
#验证用户是否z在黑名单
'''黑名单内容
xiaogang|123
xiaohong|123
xiaoming|123'''user=input('username>>')
passwd=input('passwd>>')
with open('E:\lock_user.txt', 'r') as f:for line inf.readlines():
a= line.split('|')#print(a[0]) #打印黑名单用户
if user ==a[0]:#print('your username is locked')
#tag=False
#break
sys.exit('%s has been locked' %(user))
judge_user=dict.get(user)if judge_user ==passwd:print('login successful')
tag=Falsebreak
elif judge_user ==None:print('username is not exsit')else:print('wrong passwd')
count+= 1