一、数据类型

1.数据类型有哪些

1.整型 int   2.浮点型 float    3.字符串 str     4.布尔型 bool     5.列表 list     6.元组 tuple      7.字典 dict

 

2.查看数据类型使用type()

eg:age = 18

  type(age)

 

基本上会用内置函数instance()去判断类型

#查看数据类型
age = 18
gender = 'boy'
print(type(age))#int
print(isinstance(gender,str))#True
print(isinstance(gender,int))#False

 

3.数据类型的转换

int、float→str

  str(123)  #'123'

       str(12.3) #'12.3'

int →float

   float(123) #123.0

int、float、str→bool

    bool(123) #True

    bool(12.3) # True (非o就是True ,o/空就是False)

  bool('1') #True

str→int /float (只有数字型字符串:才可以转换为int/float )    

       str='123'   print(type(int(str)))   #int

  str='123'   print(type(float(str)))   #float

float→int / str 

  int(1.8)是1 ,直接留整数部分,小数部分舍去

 

❤重点讲解bool()

为0或者空,bool()都是false,

①print(bool(1))#True

    print(bool(0)) #False

    print(bool(-1)) #True

②print(bool(''' ''')) #True  不是空字符串,三引号里面有空格,可以参照‘’‘ helloworld’‘’ != '''hello  world'''

   print(bool('''''')) #False

 

二、运算符

1.算术运算符 +  -  *  /  **  %  //

a = 2
b = 4
print(a + b)
print(b - a)
print(a * b)
print(b / a)  #2.0

加法+  可以实现字符串的拼接  列表的相加

#加法 字符串的拼接
str_1='hello'
str_2=' pyhton'
print(str_1 + str_2) #hello pyhton
#加法 列表的相加 list_1 = [1,2,3] list_2 = [4,5,6] print(list_1 + list_2) #[1, 2, 3, 4, 5, 6]

乘法*  可以实现对 字符串 列表 元组 字典 等的多次输出

str_2='pyhton'
list_2 = [4,5,6]
print(str_2 * 3) # pyhtonpyhtonpyhton
print(list_2 * 2) #[4, 5, 6, 4, 5, 6]

 

❤重点讲解除法 /

①除法:两个int型的数相除,结果会类型转化,为float

②除数不能为0

a = 10
b = 3
print(a/b)#3.3333

 

 幂运算:**

print(5**-2)#1/25

 

整除://

整除,即只留商,舍去余数

print(25/2)#12,

 

模运算(取余运算):%

print(25/2)#1 返回结果是余数
print(5/3)#2

 模运算运用:

经常用来判断奇偶性,余数为0是偶数,余数为1是奇数

 

2.赋值运算符

变量的定义就是典型的赋值运算

a = 5 #将5赋值给变量 
x += 1 #x = x + 1
y -= 4 #y = y - 4

 

3.比较运算符 >    >=   <    <=   !=    ==  6种

即:比较左右两边的值的大小   ==     != ,返回的结果是bool(True False)

a = 5
b = 8
print(a > b) #False
print(a != b) #True
print('get' == 'GET')# False python区分大小写
print(False == 0) # True python 0 等同于false 1 等同于True
print(False == [])# []空列表是false,但是不能等同于

 

4.逻辑运算符 and  or  not (结果对应True、False)

and(且):同时为真,才是真(只要有一个是false,结果就是false,并且)

a = 5
b = 8
print(a > b and b < 10)#False
print(a < b and b < 10)#True

 

or (或):有一个为真,就是真(全假才是假)

a = 5
b = 8
print(a > b or  b < 10)#True
print(a < b or b < 10)#True
print(a > b or b > 10)#False 全假才是假

not(非):专门取非运算

print(not False)#True

分不清楚优先级,可以用括号 括起来

5.成员关系运算符 in、 not in (返回的结果是bool : True False)

c = 'vip members include lili,lucy,polo'
print('lili' in c)
list_3 = [1,2,3,['hello','python',4,5,6]]
print('python' in list_3[3]) #True

 

6.优先级总结

以下从左到右:高到低

幂运算** → + -(正负号)→ 算术运算符 → 比较运算符 → 逻辑运算符

 

三 、字符串

1.什么是字符串

引号括起来的数据类型就是字符串(引号可以是单引号、双引号、三引号(单三引号、双三引号,没区别))

a = 'hello python'
print(a)
s_2 = "world"
s_3 = '''lemon'''
s_4 = """best"""
print(type(s_1))

三引号可以表示多行字符串

b = '''人之初,性本善
性相近,习相远
。。。。。
。。。。。'''
print(b)

灵活拷问1:

三引号什么时候用来做注释?什么时候用来做字符串?

代码后面需要用到的,就是字符串

不需要使用,用来解释代码的就是注释

 灵活拷问2:

1).引号嵌套的时候 单引号只能嵌套双引号 双引号只能嵌套单引号 三引号没有区别

2).三引号可以做多行注释的作用

3).三引号可以保持字符串的格式 双引号需要依赖连接符来连接换行(\)

 

2.字符串的操作 增删改查

①什么是成员运算符  in 、 not in

c = 'vip members include lili,lucy,polo'
print('lili' in c)

 

②字符串的索引

  1)python字符串的取值原理:索引 字符串里面的每个字符都是有下标的,并且是从索引值0(位置1)开始的

  下标 == 索引值

  2)索引取值方向

  正序索引:从0开始

  反序索引:从-1开始(从尾巴开始索引)

  3)怎么取:字符串名[索引值]

str_1='python'
print(str_1[3]) #h
print(str_1[-2]) #o

 4)索引超出范围 会报错indexerror

str_1 = 'hello'
print(str_1[8])

报错:

print(str_1[8])
IndexError: string index out of range

 

③字符串的切片

切片操作:可以从字符串中获取子字符串(原字符串的一部分)

分片的定义:一对 方括号 起始偏移量start 终止偏移量end  可选的步长 step 来定义一个切片

格式:[start:end:step]

Start:开始的索引值

End:结束的索引值

Step:步长,取值之间的间隔  默认值是1(默认是1的时候,可以不写

特点:取头不取尾

举例:

s = 'hello python lemon'
print(s[::])#利用切片,实现字符串的复制
print(s[:18])
print(s[0:])
print(s[6:12])#12-6=6,6个元素,6,7,8,9,10,11----→取头不取尾------正序
print(s[-12:-6])#-----反序

 

***字符串切片的常规操作***

1).[ : ]---利用切片来复制字符串,

2).[start : ] :从start提取到结尾

3).[ : end]: 从开头提取到end

4).[start : end] :从start取到end

 

❤提示:end-start 是正、是负

                step        是正 是负

判断切片能否正常输出结果:end-start  与step 符号(+ -)相同,就可以正常输出结果

                                                不相同:不报错,也没有输出结果

④字符串的格式化输出

方式1: %d  % s  % f  →占坑

print('''===个人信息===
address
%s
age:%d
salary:%f
'''
)

结果:

===个人信息===

address:%s

age:%d

salary:%f

上述没有具体格式输出,继续如下

print('''===个人信息===
address
%s
age:%d
salary:%f
'''
% ('中央大街',18,23456.89))#按照对应的顺序复制,并做格式化输出

 

总结:

%S 这个坑位 可以放任意数据(字符串 整数 浮点)

%d %f 只能放数字

 

❤方式2: 字符串.format()

{ }:占坑

print('''===个人信息===
address
{}
age:{}
salary:{}
'''
.format ('中央大街',18,23456.89))

结果:

===个人信息===

address:中央大街

age:18

salary:23456.89

 

format():格式化输出,是Python2.6新增的格式化字符串的方法,把传统的%替换为{}来实现格式化输出(%:格式化操作符),相对于老版的%格式方法,有很多的优点。

优点:

1.format()不需要理会数据类型的问题;在%方法中%s只能替代字符串类型。

2.单个参数可以多次输出,参数顺序可以不相同。

3.填充方式十分灵活,对齐方式十分强大。

4.官方推荐使用的方式

 

format()后面的内容,填入大括号{}中(其中{}花括号表示replacement字段),format()可以接受2种参数:位置参数、变量(关键字)参数,均传递到replacement字段。

按位置参数

1).参数按照位置的顺序填充到字符串中,第一个参数是0,然后是1,2,3.......

>>> '{0} love {1}.{2}'.format('I','Fishc','com')  #前面的字符串调用format()方法
'I love Fishc.com'
>>> '{1} love {0}.{2}'.format('I','Fishc','com')   #注意位置的替换
'Fishc love I.com'
>>> 

2).不输入数字,直接按照顺序来填充

>>> '{} love {}.{}'.format('I','Fishc','com')
'I love Fishc.com'
>>> 

 

>>> #需要输出{},可以用{{}},即{}对自己转义
>>> '{{{0} love {1}}}'.format('I','you')
'{I love you}'
>>> 

 

>>> #一个位置参数可以使用2次
>>> '{{{1} love {0}.{1}}}'.format('fishc','I')
'{I love fishc.I}'
>>> 

 

按关键字参数

>>> #按照关键字参数,format()中要具体写明参数对应的值
>>> '{a} love {b}.{c}'.format('I','Fishc','com')
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    '{a} love {b}.{c}'.format('I','Fishc','com')
KeyError: 'a'
>>> '{a} love {b}.{c}'.format(a = 'I',b = 'Fishc',c = 'com')
'I love Fishc.com'
>>> 

综合位置参数、关键字参数(位置参数必须在关键字的前面,否则就是错误的)

>>> #综合 位置参数和关键字参数
>>> '{0} love {b}.{c}'.format('I',b = 'Fishc',c = 'com')
'I love Fishc.com'
>>> '{a} love {b}.{0}'.format(a = 'I',b = 'Fishc','com')
SyntaxError: positional argument follows keyword argument
>>> 

总结:

1)  { }的个数最好跟format后面括号里面的数据个数保持一致,如果不一致,{}的个数要比数据少

2)  Format()括号里面的数据是有索引的,也是从0开始,可以在{ }中指定取值的索引

3)  { }里面的要是给定索引值,必须全部都给索引值,不能有的给索引值,有的不给!!!!!!

4) 关键字索引:传参比较多的时候使用,是比较方便的

 

⑤、字符串中最常用的方法

1.find()

解释:可以在一个较长的字符串中查找子串,返回子串所在位置的最左端索引(第一次出现的子串),如果没有找到则返回-1.

>>> 'I love Fishc.com'.find('com')
13
>>> title = 'I love fishc.com'
>>> title.find('fishc')
7
>>> title.find('hello')#找不到返回-1
-1
>>> 

注意:如果返回值是0,不是布尔型的0,而是在索引位置0找到了子串。例如:

>>> namestr = '$$$ Get Rich Now!$$$'
>>> namestr.find('$$$')
0
>>> 

index()函数查找,返回索引值

namestr = '$$$ Get Rich Now!$$$'
b = namestr.index('Get')
print(b)  #4

index()如果找不到,就会报错,(valueerror)

find()添加起始点跟结束点参数

>>> namestr
'$$$ Get Rich Now!$$$'
>>> namestr.find('!$$',1)#只提供起始点
16
>>> namestr.find('!$$')
16
>>> namestr.find('Rich',0,7) #索引位置起始点0,结束点位置7之间没有找到子串
-1
>>> 

 index(),find()都是找字符串的索引,注意区别:

1.相同点,都是查找索引值

2.不同点:在查找不对目标串的情况下,find()会返回-1,index()是报错-valueerror:substring not found

 

2.join()   字符串拼接的高级用法

解释:用来连接序列中的元素,是字符串中很重要的方法,是split()方法的逆方法。

注意:需要被连接的序列元素都必须是字符串!!

my_list = ['hello','python','lemon']
print(','.join(my_list))               #hello,python,lemon
print(type(','.join(my_list)))         #str 
dirs = '','user','bin','env'
print('C:' + '\\'.join(dirs))   #C:\user\bin\env

 

3.split()-----返回的结构是列表

解释:将字符串分割成序列,是join()的逆方法。

>>> 'This is a good idea!'.replace('is','ez')
'Thez ez a good idea!'
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']>>> 'I love Fishc.com'.split(' ')
['I', 'love', 'Fishc.com']
>>> 

 

4.lower()

解释:返回字符串的小写字母版。

>>> title = 'I love Fishc.com'
>>> title.lower()
'i love fishc.com'
>>> 

 

5.replace()

解释:返回某字符串的所有匹配项均被替换之后得到的字符串。

>>> 'This is a good idea!'.replace('is','ez')   #可以理解为查找并替换
'Thez ez a good idea!'
>>> 

6.strip()

解释:(1)不加参数是除去字符串两侧的空格(不含字符串中间的空格)

   (2)加参数,是除去两侧的需要去掉的字符

>>> '      I love Fishc.com     '.strip()#不加参数
'I love Fishc.com'
>>> 

 加参数,只会去除字符串两侧的字符,对字符串中间没有影响.

 

7.count()  查找字符的次数

namelist = "I love you ,but you don't love me."
b = namelist.count('you')
print(b)  #2