python基础
1.变量以及数据类型
数据类型
Numbers 数字:
int(有符号整型)long(长整型[也可以表示八进制和十六进制],python3里已经废弃了)float(浮点型) complex(复数)
布尔类型 bool : Ture False
String(字符串)
空值 None
List(列表)——>shuzu----[]
Tuple(元祖)——>()
Dictionary(字典)——>{}
集合类型
进制转换:
使用代码进行进制转换:详见下列代码
a = 12
print(bin(a)) #0b1100
print(oct(a)) #0o14
print(hex(a)) #0xc
使用bin内置函数可以将数字转换成二进制
使用oct内置函数可以将数字转换成八进制
使用hex内置函数可以将数字转换成十六进制
在python里,变量是没有数据类型的,我们所说变量的数据类型,其实是变量对应的值的数据类型,不需要定义变量,直接是动态的,会随时修改的
标识符关键字
标识符:
变量,模块名,函数名,类名
标识符的命名规则:
-
由数字、字母和_下划线组成,不能以数字开头
-
严格区分大小写(计算机编程里,一共52个英文字母,26大写+26小写)
-
不能使用关键字(在python语言里有特殊含义的单词)作为变量名
保留字
| 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|
| and | elif | import | raise | global |
| as | else | in | return | nonlocal |
| assert | exept | is | try | True |
| break | finally | lamda | while | False |
| class | for | not | with | None |
| continue | form | or | yield | |
| def | if | pass | del |
规范:建议遵守,遵守规范会显得专业,并且代码易读
-
做到顾名思义
-
遵守一定的命名规范
-
小驼峰命名法:第一个单词的首字母小写,以后每个单词的首字母都大写
-
大驼峰命名法:每个单词的首字母都大写
-
使用下划线连接
在python里的变量、函数和模块名都使用下划线连接;
python里的类名使用大驼峰命名法
-
输出语句
#输出
a = 32
b = 'hello'
c = True
d = ['zjlun','zhansn']
print(type(a))
print(type(b))
print(type(c))
print(type(d))
print(type(3.14))
sep 参数用来表示输出时,每个值之间用哪种字符作为分隔。默认使用空格,修改方式如下
我 = '张三'
print(我)
print('hello','good','yes','hi')
print('hello','good','yes','hi',sep='+')
end 当执行完一个print语句以后,接下来要输出的字符。默认为\n表示换行,修改方式如下
print('hello','good','yes','hi',end = '\t')
print('hello','good','yes','hi',end = '————————————')
print('hello','good','yes','hi')
输入
input
input() ==> 括号里写提示信息
定义一个变量可以保存用户输入的内容,如下
#输入
input("请输入您的密码:")
password = input("请输入您的密码:")
print(password)
注意:不管用户输入的是什么,变量保存保存的结果都是字符串
类型转换
将一个类型的数据转换为其他类型数据
age = input('请输入您的年龄:')
#print(age + 1) error
#原因:input 接收到的用户输入都是 str 字符串类型
#在python里,如果字符串和数字做加法运算,会直接报错
#把字符串类型的变量 age 转换成为数字类型的 age
print(type(age))
#使用 int 内置类可以将其他类型的数据转换为整数
age = int(age) + 1
print(type(age))
#转换数据类型的原因:不同的数据类型进行运算时的运算规则是不一样的
#转化为整数
a = '31'
print(a) #输出31,但这个31是字符串类型
#如果字符串不是合法的数字,将字符串转换成int会直接报错
x = 'hello'
y = int(x)
print(y)
x = '1a2c'
y = int(x,16)#将字符串当做16进制数转换
#只能包含A-F
m = '12'
n = int(m,8)
print(n) # 10
#转化为浮点数
a = '12.34'
#使用内置float类可以将其他类型数据转换成为float浮点数
b = float(a)
print(b+1)
c = 101
print(float(c))
print(float('12'))#将字符串转换成浮点数 12
print(float(12))#将整型数字转换成浮点数 12
#转换成为字符串
#使用 str 内置类可以将其他类型数据转换成为字符串
a = 34
b = str(a)
print(a,b)# 34 34 前一个是int 后一个是字符串
转换为布尔值
#使用bool内置类可以将其他数据类型转换成布尔值
print(bool(100))#将1数字100转换成布尔值 True
print(bool(-1))#True
print(bool(0))#False
#数字非零都是True
#字符串转布尔类型
print(bool('hello'))# True
print(bool('False'))#True
print(bool(''))#False
#空字符串 ''/"" 才能转换为False,其他字符串都是True
#None空数据 转换为布尔值是 False
print(bool(None))#False
#[]空列表
print(bool([]))#False
#()空元组
print(bool(()))#False
#空集合
s = set()
print(bool)
#在Python中,只有空字符串'',"",数字0,空字典{},空列表[],空元组(),空数据None会被转换为False
#其他的都会转换为True
#在计算机里,True和False其实就是使用数字 1 和 0来保存的
print(True + 1) # 2
print(False + 1)# 1
运算符
#算术运算符在数字里的使用
** 幂运算
**等价于^,例如2 * *10=1024
开平方:
print(81 ** (1/2))
**=
// 整除
print(10 / 3) #3.333333333
print(10 // 3) #3
//=
#除法
#在Python 3里,两个整数相除,得到的结果会是浮点数 10/3——>3.333333
#在Python 2里,两个整数相除,得到的结果会是一个整数 10/3——>3
print(6/2) # 3.0
print(9/2) # 4.5
#算术运算符在字符串里的使用
#字符串里支持的算术运算符有限,只支持加法和乘法
#加法运算符:只能用于两个字符串拼接,数字和字符串之间不能做加法运算
#乘法运算符:只能用于数字和字符串之间,用来将一个字符串重复多次
print('hello' * 2) #hellohello
m,n = 3,5 #拆包
print(m,n) # 3 5
x = 'hello','good','yes' #元组,()可以省略
print(x) #('hello','good','yes')
#拆包时,变量的个数和值的个数不一致会报错,不能多也不能少
# y,z = 1,2,3,4,5 #有太多的值要解包了 error
# print(y,z)
#o,p,q = 4,2 #拆包的值不够 err
#print(o,p,q)
o,*p,q = 1,2,3,4,5,6 # *p是可变长度,把1给o,6给q,[2,3,4,5]给p
print(o,p,q) # 1 [2,3,4,5] 6
*o,p,q = 1,2,3,4,5,6 # *o是可变长度,把6给q,5给p,[1,2,3,4]给o
print(o,p,q) # [1,2,3,4] 5 6
o,p,*q = 1,2,3,4,5,6 # *q是可变长度,把1给o,2给p,[3,4,5,6]给q
print(o,p,q) # 1 2 [3,4,5,6]
#比较运算符
#字符串之间使用比较运算符,会根据各个字符的ASCII码值逐一进行比较
print('a'>'b') #False
print('abc'>'b')#False 979899 > 98 是97和98比较,这就是逐一比较的意思
#数字和字符串之间,做 == 运算的结果是False,做!=运算的结果是True,不支持其他的比较运算
print('a' == 90)#False
print('a' != 97)#True
print('a' > 90)#error
#逻辑运算符
# 逻辑与 and 逻辑或 or 逻辑非 not
print(2 >1 and 5 > 3 and 10 > 2)
#逻辑与运算做取值时,取第一个为False的值;如果所有的运算数都是True,取最后一个值
print('good' and 'yes' and 'ok' and 100)#100
#逻辑或运算做取值时,取第一个为True的值;如果所有的运算数都是False,取最后一个值
print(0 or [] or {} or ())#()
#位运算符与C语言相同
#运算符的优先级
逻辑运算符的优先级:not > and >or
强烈建议:在开发中,使用括号来说明运算符的优先级
#python不支持switch……case语句
——————————————————————————————————————————————————————————————————————————————
#if结构:
if 条件判断:
条件成立时执行的代码,前方有缩进
例子:
age = int(input("请输入你的年龄:"))#注意:这里input得到的是字符串,不能和数字比较,
#需要类型转换
if age < 18:
print('未满18岁禁止入内')
——————————————————————————————————————————————————————————————————————————————
#if……else结构
if 条件判断:
条件成立时执行的代码
else:
条件不成立时执行的代码
#注意:if和else后面都要跟:冒号
# 下方要执行的代码需要有缩进
age = int(input("请输入你的年龄:"))
if age < 18:
print('未满18岁禁止入内')
else:
print('请进')
——————————————————————————————————————————————————————————————————————————————
score = int(input('请输入你的分数\n'))
if 60 > score >= 0:
print('不及格')
elif 80 > score >= 60: #这里的 elif 是else if 的意思,但Python不支持写else if
print('良好')
elif 90 > score >= 80:
print('优秀')
elif 100 >= score >=90:
print('真棒')
else:
print('请输入正确的分数')
—————————————————————————————————————————————————————————————————————————————— # Python语言里,使用强制缩进来表示语句间的结构
#pass 关键字在Python里没有意义单纯的用来占位,保证语句的完整性
例子:
age = int(input('请输入您的年龄:'))
if age > 18:
pass #这里pass用来占位,但这条语句没有含义,如果缺少了pass就会报错
print('hello')
#三元表达式
num1 = int(input('请输入一个数字:'))
num2 = int(input('请再输入一个数字:'))
x = num1 if num1 > num2 else num2
'''
等价于
if num1 > num2:
x = num1
else:
x = num2
'''
print('两个数里的较大数是',x)
循环
python里不支持do……while循环
python里也没有自增自减运算符
#while循环
x = 10
while x < 10:#注意这里也有:冒号
print('hello')
x++
#for···in 循环
Python的for循环指的是for……in 循环
#for……in循环格式:
for x in [1,2,3,4,5,6,7,8,9] #注意:in后面必须要是一个可迭代对象!!!
#目前接触的 可迭代对象:字符串、列表、字典、元组、集合、range
#range 内置类用来生成指定区间的整数序列(列表)
#range 生成的是左开右闭区间
for x in range(1,11):
print(x)#输出1-10
等价于:for x in [1,2,3,4,5,6,7,8,9,10]:
print(x)
用for……in循环打印1到100的和:
for x in range(1,101):
z +=j
print(z)
break和continue
#break和continue在Python里只能用于循环语句中
#break用来结束整个循环
#continue用来结束本轮循环,开启下一轮循环
嵌套循环
外循环控制行数,内循环控制列数
for……else
for……else语句:当循环里break没有被执行的时候,就会执行else
字符串
字符串的表示方式
字符串是不可变数据类型,对于字符串的任何操作,都不会改变原有的字符串
#在python里,可以使用一对单引号、一对双引号、一对三个双引号、一对三个单引号都可以表示字符串
#如果字符串里面还有双引号,外面就可以使用单引号
#字符串的转义字符 \
x = 'I\'m xiaoming' # \ 表示的是转义字符,作用是对 \ 后面的字符进行转义
——————————————————————————————————————————————————————————————————————————————
#字符串的下标和切片
# 下标我们又称之为索引,表示第几个数据
str list tuple 可以通过下标来获取或操作数据
下标都是从0开始的
Word = ’zhangsan'
print(word[4])
#字符串是不可变数据类型,对于字符串的任何操作,都不会改变原有的字符串
——————————————————————————————————————————————————————————————————————————————
#切片
#切片就是从字符串中复制一段指定的内容,生成一个新的字符串
m = 'abcdefghijklmnopqrstuvwxyz'
print(m[5])#m[index] ==> 获取指定下标上的数据
#切片语法 m[stard:end:step]
#也是左闭右开区间
#step指的是步长,理解为在指定区间内,每step个取一次
print(m[2:9])#cdefghi ==>[2,9)
print(m[2:])#如果只设置了start,后面默认到最后 cdefghijklmnopqrstuvwxyz
print(m[:9])#如果只设置了end,会从头开始取值 abcdefghi
#步长默认为1
print(m[2:9:2])#步长为2, cegi
#步长不能为0,但可以为负数
print(m[3:15:-1])#打印的是空的,-1是从右往左找,从下标为3的地方往左找下标为15
print(m[15:3:-1])#注意:这里包含15,不包含3 ponmlkjihgfe
print(m[::])#从左往右全部复制一份
print(m[::-1])#从右往左全部复制一份
#stard和end为负数表示从右往左数
print(m[-5:-9])#空
print(m[-9:-5])#rstu 注意:这里步长为1是正数,从左往右取
字符串的常见操作
x = 'abcdefghijklmnopqrstuvwxyz'
#获取字符串的长度
#使用内置类len
print(len(x))#26
#查找内容相关方法
#find/index/rfind/rindex
#可以获取指定字符的下标
#s.find(sub[,start[,end]]) -> int 返回的一定是一个int值
print(x.find('l')) #11
print(x.index('l')) #11
#find和index的区别:
print(x.find('P')) #-1 如果字符在字符串里不存在,结果是-1
print(x.index('P')) # ValueError: substring not found 字符在字符串里不存在会报错
#使用find,如果字符在字符串里不存在,会返回-1
#使用index,如果字符在字符串里不存在,会直接报错
#find用法2:
print(x.find('l',4,9))#在下标4到9的范围内寻找字符'l'
'''
s.find(sub[, start[, end]]) -> int
Return the lowest index in S where substring sub is found,
such that sub is contained within s[ start: end]. Optional
arguments start and end are interpreted as in slice notation.
Return -1 on failure.
s.find(sub [,start [,end]])-> int
返回S中找到子字符串sub的最低索引,
这样sub包含在s [start:end]中。可选的
参数start和end被解释为切片表示法。
失败时返回-1。
'''
#rfind和rindex都是找最大的下标,它们和find,index它们的区别与find和index的区别是一样的
# startswith,endswith, isalpha,isdigit, isalnum, isspace
# is开头的是判断,结果是一个布尔类型
print('he1lo'.startswith('he')) #True startswith 判断字符串是不是以括号里面的字符为开头
print('hello'.endswith('o')) #True endswith 判断字符串是不是以括号里面的字符为结尾
print('hello'.isalpha())# True 判断字符串是不是都字母 alpha字母
print('123'.isdigit())#True 判断字符串是否都是正整数 digit数字
#alnum判断字符串是否由正整数或字母组成
print('ab123hello'.isalnum())#True
print('123'.isalnum())#True
print('abhello'.isalnum())#True
print('4 - 1'.isalnum())#False
print(' '.isspace())#True是否全部由空格组成
'''
计算出现次数:count
返回 str 在start和end之间在mystr里面出现的次数
语法格式:
s.count(sub[,start[,end]]) -> int
示例:
mystr = '今天天气好晴朗,处处好风光'
print(mystr.count('好')) #3 '好'出现了三次
'''
"""
#替换内容:replace
替换字符串中指定的内容,如果指定次数count,则替换不会超过count次
mystr ='今天天气好晴朗,处处好风光呀好风光'
newstr = mystr.replace('好','坏')
print(mystr)#今天天气好晴朗,处处好风光呀好风光 原字符串未改变!
print(newstr)#今天天气坏晴朗,处处坏风光呀坏风光得到的新字符串里,'好'被修改成了'坏'
newstr = mystr.replace('好',坏',2)#指定了替换的次数
print(newstr)#今天天气坏晴朗,处处坏风光呀好风光只有两处的‘好被替换成了‘坏
"""
#切割字符串split,rsplit,splitlines,partition,rpartition
#字符串类型的数据
x = 'zhangsan-lisi-wnagwu-jerry-henry-merry-jack-tony'
#['zhangsan','lisi','wangwu','jerry','henry','merry','jack','tony']
#使用split方法,可以将一个字符串切割成一个列表
y = x.split('-')
print(y) #切割以后的结果就是一个列表['zhangsan','lisi','wangwu','jerry','henry','merry','jack','tony']
#rsplit
z = x.rsplit('-')#从右往左切
print(z)#['zhangsan','lisi','wangwu','jerry','henry','merry','jack','tony']
#print(x.split('-',2))的2是分割两次的意思,2控制分割次数,不写默认全部分割
print(x.split('-',2))#['zhangsan', 'lisi', 'wnagwu-jerry-henry-merry-jack-tony']
print(x.rsplit('-',