一、Python基础
1.Python如何命名:
变量:就是一个容器
弱语言:变量声明的时候对数据类型不是很严格
格式:变量名=值
怎么起名?赋什么值?有什么数据类型?
变量名的命名规范:
- 只能是字母,数字,下划线,且不能以数字开头,其他特殊符号不可以
- 不能使用关键字,严格区分大小写
- 以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 foo 代表 Python 里特殊方法专用的标识,如 init
命名见名知义:
getNameByLine:驼峰式:开头一个字母小写,后面大写 小驼峰
Python建议使用下划线:get_name_by_line=6
类名一般使用大驼峰:每个字符首字母大写,FirstName
2.数据类型以及数据类型转换:
变量类型:
1.数字(numbers):int float double short long complex
2.布尔类型:true false,开发中用来进行判断isLogin=True
3.字符串:string
4.列表
5.元组
6.字典
7.集合
输入:
input()和print()是对应的;
userName=input(“请输入你的用户名:”)阻塞型函数
print(userName)
类型转换:
money=input(“请输入你的缴费金额:”)
print(money+1000) 会出现警告
可以进行类型转换:
print((int)money+1000)
print(money+str(1000))将数字转为字符串
python不支持强制转换
str-->int int(a) 但是如果'9.9',而且是字符串转换为int类型,会出现错误
str-->float float(a)
int -->float float(a)
float-->int int(a) 只不过会把小数点后面的小数抹掉
flag=True
bool类型转为整型,
print(int(flag)) 布尔转为整型,true为1,false为0;
float(flag) 也可以,带一位小数;
非零数值、非空字符串、非空list、dict、tuple等,就判断为True,
否则为False ---重要!!!
问题:a=5,能否将a转为布尔?
a=5
print(bool(a)) 返回值为True
a=0
print(bool(a)) 返回False
变量的值为0,’’(空字符串),转换结果为false,其他转换为true;
格式化输出:
name=‘邢小艾’
age=18
print(“我喜欢听”+str(age)+“岁的”+name+“唱歌!”)
格式化输出:
符号:%s 字符串string %d 整数digit
%f 浮点数 %c 字符格式
print('我喜欢听%d岁的%s唱歌!'%(age,name))
money=999.98
#18岁的邢小艾一首歌赚了money块钱
print('%d岁的%s一首歌赚了%f块钱'%(age,name,money))
print('%s岁的%s一首歌赚了%.2f块钱'%(age,name,money))
3.运算符:
赋值运算符:=,± 、*/
算术运算符:+,-,*,/,%,//,**
如:a=3 b=3
print(a/b) 除法
print(a//b) 整除
print(a**b) 整数次幂 2的3次方
print(a%b) 取余,取模,计算奇偶数的时候,计算倍数的时候使用模
键盘输入一个3位数的整数,打印个位数,百位数,十位数的数字是多少
123字符串
123%10=3
123//10=12 //才是进行整除
12%10=2
12//10=1
1%10=1
赋值运算符:
+=,*=,/=,//=,**=,%=
a=8
b=4
c=a+1
关系运算符:结果只有两种:true和false
=,<=,>,< ,!=,is(判断地址是否相等)
a=‘abc’
b=‘sdf’
print(ab)
print(a<b)比较的时候根据字符的ASCII码进行判断
逻辑运算符:
and or not与或非
a=1
b=3
print(a and b)
not True 就是false
is :内存地址判断
Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。
is和==都是对对象进行比较判断作用的,但判断的内容不相同。
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同
id( ):对象占用的内存空间的起始地址
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
字体颜色快捷键的设置:font
4.进制:
二进制:0,1
八进制:0,1,2,3,4,5,6,7
十进制:0~9
十六进制:0~ 9,a~ f
149转二进制:
n=149
result=bin(n)#转为二进制
print(result)
十进制转八进制:除8取余
八进制转十进制:每个位上数字*8的几次方
bin()二进制0b
oct()八进制0o
hex()十六进制0x
默认是十进制
思考:
bin(n),无论当前的参数是多少位,都可以直接转换为二进制;
int()
oct()
hex()十六进制转为二进制,直接把每个数字直接转为二进制;十六进制转8进制,先转为二级制,再进行3个划分,得到的就是八进制的数字;
二进制转16位,4位进行划分,高位不足补0;
二进制转8进制,3位进行划分,高位不足的时候补0
位运算:& | ^ << >>
& 类似and
n1=0b0110
n2=0b0010
print(n1&n2) 返回的就是2–0b0010
~取反:
n1=12
print(~n1)
按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x类似于 -x-1
二进制的负数是如何表示的?
通常是使用补码进行表示;
原码
反码
补码=反码+1
例如:print(~5)
先计算5的原码:0000 0101
反码:1111 1010(负数)
补码:1111 1001(减一)
在进行取反:0000 0110 得到的就是6,但是是负数,所以是-6
例如:print(~-5)
首先计算-5的原码:0000 0101
反码:1111 1010
补码:1111 1011
取反:0000 0100 得到的结果就是4
-7的二进制:
左移:<<相当于*2的几次方
右移:>>相当于除以2的几次方
n=89 右移5位,
6.条件语句:
if…
if…else…
if…else if…else…
if a>5:
条件成立,要执行的语句;
else:
条件成立;
result=input(‘请输入(y/n):’)
if result==‘y’:
print(4)
print("----")
pass:本身没有意义,只是支撑这个结构,后面可以自己来填内容
条件嵌套:
三元运算符:
a=1
b=2
c=a if a<b else b
print(a,b,c)
循环:应用场景:
1.用户名和密码,反复输入
2.计算1-100
3.王者,死了重生
方式:while for
打印1-50之间能被3整除的数字
for i in range(1,50):
if i%3==0:
print(i)
while n<=50:
if n%3==0:
print(n)
n-=1;
for循环:
格式:for i in range(n):
for i in range(10):
print(i)
打印的内容为:0,1,2,3,4,5,6,7,8,9
默认从0开始,只包括前面的值,不包括后面的值;
指定初始值的话,就从初始值开始打印。
指定步长:for i in(1,10,2)指定步长为2
求1-50的累加和
sum=0
for i in range(1,51):
sum+=i
print(sum)
最多只有三次机会输入用户名和密码,如果三次没有输入成功,则退出,如果一次输入成功,则退出循环;
for i in range(3):
username=input('用户名')
password=input('密码')
if username=='admin' and password=='1234':
print(;用户登录成功')
break
else:
print('用户输入有误')
print('--------------')
if i==2:
print('账户被锁定')
for…else…
for i in range(3):
循环体
else:
如果上面的for 循环从0-n-执行的过程中没有出现中断,执行完都没有执行到所以现在才会继续执行这一块的代码
while…else…
n=1
while n<=10:
print(n)
if(n==5):
break
n+=1
else:
print()
while…else…:
不被中断才会继续去执行;
使用场景:
for:含有固定次数
while:可以固定次数,也可以不确定次数的循环;
if…else…
投掷游戏:
两个筛子:1-6
1.玩骰子要有金币,
2.玩游戏赠一枚金币,充斥送金币
3.10元的倍数,20个金币;
4.玩游戏消耗金币,一局5个金币
5.掷骰子猜大小:猜对了,会有鼓励金币2枚赠送;猜错了没有奖励;
两个骰子的点数相加超过6以上,则判定为大,否则,判断为小;
6.游戏结束:1.主动退出;2.没有金币退出;
7.只要退出则打印金币的剩余个数和玩的局数
import random
count=0#计数器
coins = 0 # 金币数
if coins < 5:
# 提示充值
print('金币不足,请充值后再继续玩游戏')
while True:
money = int(input('请输入充值的金额:'))
if money % 10 == 0:
coins += money // 10 * 20
print('充值成功,当前金币有%d个' % coins)
# 开启游戏之旅
print('----开始游戏之旅----')
answer = input('是否开启游戏之旅(y/n):')
while coins >= 5 and answer == 'y':
count+=1
coins -= 5
# 赠送金币
coins += 1
# 产生两枚随机的数字
ran1 = random.randint(1, 6)
ran2 = random.randint(1, 6)
guess = input('洗牌完毕,请猜大小:')
# 判断大小
if guess == '大' and ran1 + ran2 > 6 or guess == '小' and ran1 + ran2 <= 6:
print('恭喜你,猜对了')
coins += 2
else:
print('很遗憾,本次猜错了')
answer=input('是否继续游戏(y/n):')
print('共完了%d局游戏,剩余金币%d个金币'%(count,coins))
break
else:
print('不是10的倍数,充值失败')
跳出语句:continue和break
break:跳出当前整个循环语句
continue:跳过本次循环(后面的语句不执行),继续下一次循环
不打印能被3整除的
for i in range(10):
if i%3!=0:
print(i,end='')#不换行
n=1
while n<=5:
m=0
while m<n:
print('*,end='')
m+=1
n+=1
流程控制:
条件语句:if
字符串介绍:
单引号,双引号,转义字符,三个单引号,三个双引号
s1='hello'
s2=s1
s3='hello'
print(s1,s2,s3)
print(id(s1))#打印地址
print(id(s2))
print(id(s3))
print(s1 is s2)#判断地址是否相同
字符串保留区:和Java的字符串常量池类似,常量池中有的就不用再创建了。
切片操作:
s1=‘ABCDEFG’
print(s1[4]) #使用索引
print(s1[-3:]#从-3开始到结尾
print(s1[:])#相当于打印整个s1
#不要两边的数字
print(s1[1,-1])
还可以跟步长
s1[start,end,step]
print(s1[👎2])#包前不包后
#查找:find,index,rfind,rindex
find从左往右查找,只要遇到一个符合要求的就返回当前位置,如果没有找到任何符合要求的,则返回-1;
rfind:表示从右开始查找,
path='http://www.baidu.com/img/dong_eglish.gif'
i=path.find('_')
print(i)
image_name=path[i+1:]
print(image_name)
找到图片的后缀名
i=path.rfind('.')
zhui=path[i:]
print(zhui)
count:统计指定字符的个数
index与find的区别:index也是表示查找,找不到会报错;
判断:返回值都是布尔类型
startswith:是否是以XXX开头的
result=s.startswith(‘e7’)
endswith:是否以XXX结尾的
模拟文件上传,键盘输入上传文件的名称(abc.gif),判断文件名是否大于6位以上,扩展名是否是:jpg,gif,png格式
如果不是则提示上传失败,如果名字不满足条件,而扩展名满足条件则随机生成一个6位数字组成的扩展名,打印成功上传XXX.png
file=input(‘输入文件全称:’)
#判断扩展名是否正确
if file.endswith(‘jpg’) or file.endswith(‘gif’) or file.endswith(‘png’):
#判断文件的名字
i=file.rfind(’.’)
name=file[:i]
if len(name)<6:
#重新构建一个文件名
n=random.randint(100000,999999)
new_name=str(n)+file[i:]
print(‘成功上传%s文件’%file)
else:
print(‘文件格式错误,上传失败’)
类似登录的时候刷新出现的验证码,如:AF5s格式,出现数字和字母的组合形式。
filename = ''
s = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'
for i in range(4):
index = random.randint(0, len(s) - 1)
filename += s[index]
print(filename)
替换,切割
替换内容:replace
s=‘啊泽:德善,你真好看!’
s=s.replace(‘你’,’**’)
print(s)
当有两个或者多个要替换的内容时,使用正则表达式或者列表
切割:
split()
s=‘崔泽 德善 狗焕’
s.split(’ ')
空格常见处理:
空格处理:ljust,rjust,centre,lstrip,rstrip,strip
字符串拼接:json
#数字字段名
#可以通过数字形式的简单字段名传递位置参数
数字必须是大于等于0的整数
带数字的替换字段可以重复使用
数字形式的简单字段名相当于把format中所有位置参数当作一个元组,通过字段名中的数字进行取值,即{0}等价于tuple[0],所以大括号内的整数不能越界。
result=‘美女{0}今年{1}岁了,我也{1}岁了’.format(name,age)
print(result)
也可以使用索引进行填充
变量字段名命名:format里面的参数必须使用关键字,关键字参数
result=‘美女{name}今年{age}岁了,我也{age}岁了’.format(name=’赵丽颖’,age=18)