02_python基础类型详解

目录

1.python基础类型详解

 2.int_float_bool

2.1 int

2.2 float

2.3 bool

2.4 基础数据类型之间的转化

3.字符串

3.1 字符串的格式化问题

3.2 索引和切片

3.3 字符串常规操作

3.3.1 字符串的大小写转换

3.3.2 切割和替换(*)

3.3.3 查找和判断

3.3.4 补充

4.列表

4.1 列表的特性 

4.2列表的增删改查

4.3 列表的其他操作(补充)

5.元组

6.集合

7.字典

7.1 字典的特性

7.2 字典的增删查改

7.3 字典的进阶操作-循环和嵌套

8.bytes(字节)

9.运算符

 10.文件操作

 10.1 打开文件

10.2 读文件

10.3 写入文件

10.4  文件的复制


1.python基础类型详解

int float bool
str  (******)字符串
list (******)列表
tuple (**) 元组
set () 集合
dict (******) 字典
bytes(****)字节
运算符(***)
文件操作(****)

 2.int_float_bool

2.1 int

int : 整数,加减乘除,大小比较
a = 10

2.2 float

float: 小数,浮点数
a = 10.5
print(a)#结果:10.5

2.3 bool

bool : 用来做条件判断的
       取值范围:TURE,flase

2.4 基础数据类型之间的转化

a = '10'  #字符串
print(type(a)) #结果:<class 'str'>

b = int(a)
print(type(b))  #结果:<class 'int'>

a = 10
b = bool(a)
print(type(b))  #结果:<class 'bool'>
print(b)  #结果:True
在python的基本数据类型中,表示空的东西都是false,不空的东西都是ture
s = '' #在python中,表示空的东西,都是false,不是空的东西都是Ture

print(bool(s)) #结果:False

3.字符串

3.1 字符串的格式化问题

input接收的打印出来都是字符串类型

name = input("请输入你的名字:") # 输入:周润发
address = input("请输入你的地址:") # 输入:香港


print(name) # 结果:周润发
print(type(address)) # 结果:<class 'str'>
%S 字符串占位
%d 占整数位
name = input("请输入你的名字:") # 输入:周润发
address = input("请输入你的地址:") # 输入:香港
age = input("请输入你的年龄:") #输入 :18

s = "我叫%s,我输在%s,我的年龄是%s" % (name,address,age)

s1 = "我叫{},我输在{},我的年龄是{}".format(name,address,age)

s2 = f"我叫{name},我叫{name},我叫{name},我叫{name},我叫{name},我叫{age}" #f-string

print(s) # 结果:我叫周润发,我输在香港,我的年龄是18

print(s1) # 结果:我叫周润发,我输在香港,我的年龄是18

print(s2) # 结果: 我叫周润发,我叫周润发,我叫周润发,我叫周润发,我叫周润发,我叫18

3.2 索引和切片

索引:按照位置提取元素
s = "我叫周杰伦"

#可以采用索引的方式来提取某一个字符(文字)

print(s[3]) #杰 从0开始数数
print(s[-1]) # 伦 倒数第一个
切片: 从一个字符串中提取一部分内容
语法:s[start,end]  从start到end进行切片,但是取不到end
s = "我叫周杰伦,我唱歌很好"

print(s[3:6]) #杰伦,  从索引3位置进行切片,切到6结束


print(s[-3:-1]) #歌很  #只能从左往右切片
                       #等同于print(s[-3:-1:1])

r = "我爱你"
print(r[::-1]) #你爱我       #最后的是步长

s = "jiafiahdhfaadaf"

print(s[3:8:2]) #fad  切片3-8,步长为2

3.3 字符串常规操作

字符串的操作一般不会对原来的字符串产生影响,一般都是产生一个新的字符串

3.3.1 字符串的大小写转换

s = "python"
s1 = s.capitalize() #单词的首字母大写
print(s1)


s = "I have a dream!"
s1 = s.title() #每个单词的首字母大写
print(s1)


s = "I HAVE A DREAM"
s1 = s.lower() # 变成小写
print(s1)


s = 'i have a dream'
s1 = s.upper() # 把所有字母变成大写
print(s1)
 #如何忽略大小写来进行判断

 verify = "xAoa"

 user_input = input(f"请输入验证码({verify}):")

 if verify.upper() == user_input.upper():
     print("验证成功")
 else:
     print("验证失败")

3.3.2 切割和替换(*)

#  strip()去除字符串两端的空白
s = "   你好,  我叫,   周杰伦    "

s1 = s.strip()# 去掉字符串两端的空白符(空格,\t \n)

print(s1)  #结果:你好,  我叫,   周杰伦
#replace(old,new) 字符串替换
s = "你好啊,我叫奥利给"

s1 = s.replace("奥利给","周杰伦")

print(s1) #结果:你好啊,我叫周杰伦

a = "a b c d e f g"

a1 = a.replace(' ','')  #去掉所有的空格

print(a1) #结果:abcdefg
# split(用什么切割) 字符串切割  #用谁切就会损失掉谁。
a = "python_java_c_c#_javascript"

lst = a.split("_") #切割以后会放在列表中

print(lst) # 结果:['python', 'java', 'c', 'c#', 'javascript']

3.3.3 查找和判断

# 查找
s = "你好啊,我叫周润发"

ret = s.find("周润发12312")  #返回-1就是没有该字符串出现

print(ret) # 结果:-1

ret = s.index("周润发12312")   #如果报错了就是没有
print(ret) # 结果:报错

#in可以做条件上的判断
print("周润发" in s)    # 结果:ture
print("周润发" not in s) #结果:false
# 判断
name = input("请输入你的名字:")
#判断你是不是姓张
if name.startswith("张"): #判断字符串是不是以xxxxx开头,endswith()结尾
    print("你姓张")
else:
    print("你不姓张")

money = input('请输入你兜里的钱:')

if money.isdigit(): #判断字符串是不是整数组成
    print("你可以画画了")
else:
    print('对不起')

3.3.4 补充

s = "hello"
print(len(s)) #统计这个字符串里有几个字符
lst = ['a','b','c']

s = ''.join(lst)   #把列表中的字符串连接起来
print(s)  #abc

4.列表

在python中用[]来表示一个列表,列表元素通过,隔开
a = ["张三丰",'张无忌',[1,3,5,True]]

4.1 列表的特性 

特性:
#  1、 也像字符串一样有索引和切片
#  2、索引超过范围会报错
#  3、可以用for来进行遍历
#  4、可以用len拿到列表的长度

 1、 也像字符串一样有索引和切片

lis = ["金毛狮王","张绍刚","郭麒麟","灭绝师太"]

print(lis[0])  金毛狮王
print(lis[1:3]) ['张绍刚', '郭麒麟']
print(lis[::-1]) ['灭绝师太', '郭麒麟', '张绍刚', '金毛狮王']

2、索引超过范围会报错

lis = ["金毛狮王","张绍刚","郭麒麟","灭绝师太"]

print(lis[12]) #list index out of range

3、可以用for来进行遍历

lis = ["金毛狮王","张绍刚","郭麒麟","灭绝师太"]

for item in lis:
    print(item) 

4、可以用len拿到列表的长度

lis = ["金毛狮王","张绍刚","郭麒麟","灭绝师太"]

print(len(lis))

4.2列表的增删改查

向列表添加内容
# append() 追加
lis = []
# append() 追加
lis.append("赵本山")
lis.append("张无忌")
lis.append("海燕")
print(lis) #结果:['赵本山', '张无忌', '海燕']
#insert() 插入
lis = []

lis.append("赵本山")
lis.append("张无忌")
lis.append("海燕")

lis.insert(0,"美女") 
print(lis)   #结果:['美女', '赵本山', '张无忌', '海燕']

# extend() 可以合并两个列表,批量的添加
lis = ['赵本山', '张无忌', '海燕']

lis.extend(["武则天","嬴政","马超"])

print(lis)  # 结果:['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
# pop() 删除
lis = ['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
ret = lis.pop(3)  #给出被删除的索引,返回被删除的元素
print(lis)
print(ret)  #结果:武则天
# remove() 删除某个元素

lis = ['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
lis.remove("马超")
print(lis)  #结果:['赵本山', '张无忌', '海燕', '武则天', '嬴政']
# 修改
lis = ['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
lis[4] = "夏侯惇"   #直接用索引就可以修改
print(lis) #结果:['赵本山', '张无忌', '海燕', '武则天', '夏侯惇', '马超']


# 查询
lis = ['赵本山', '张无忌', '海燕', '武则天', '嬴政', '马超']
print(lis[4])   # 嬴政 直接用索引去查找

4.3 列表的其他操作(补充)

# 排序
lst = [222,333,333,43,56,33,22,11,678]
lst.sort()  #对列表进行升序操作
lst.sort(reverse=True) #进行翻转
print(lst)  #结果:[678, 333, 333, 222, 56, 43, 33, 22, 11]
# 列表的嵌套
lst = ["abc","def",["呵呵呵","妈妈吗","口你家娃",["可乐",'a','abk',34]]]  #取34
print(lst[2][3][3])
#列表的循环删除(*)

安全稳妥的删除方式:
    将一个要删除的内容保存在一个新的列表当中,循环新的列表,删除老的列表
lst = ["武则天","嬴政","马超","张无忌","张三"]

temp = []
for item in lst:
    if item.startswith("张"): #循环删除姓张的
        temp.append(item)
for item in temp:
    lst.remove(item)
print(lst)  #结果:['武则天', '嬴政', '马超']

5.元组

tuple 元组, 特点:不可变的列表
t = ("张无忌","张三丰")

print(t) # 结果:('张无忌', '张三丰')

print(t[1:3]) # 结果:('张三丰',)
#  你固定了某些数据,不允许外界修改
#  元组如果只有一个元素(*),需要在元素的末尾添加一个逗号。
t = ("哈哈",)   #()默认是优先级
print(t) #结果:('哈哈',)
print(type(t)) #结果:<class 'tuple'>
# 关于元组的不可变(坑) 元组里的列表是可变的
t = (1,2,3,["呵呵哒","么么哒"])

t[3].append("哒哒哒")

print(t) #结果:(1, 2, 3, ['呵呵哒', '么么哒', '哒哒哒'])

6.集合

set 集合  集合是无序的
s = {1,2,3,"呵呵"}
print(s) #结果:{1, 2, 3, '呵呵'}
print(type(s)) #结果:<class 'set'>
# 不可哈希:python中的set集合进行数据储存的时候,需要对数据进行哈希计算,根据计算出来的哈希值进行存储数据
# 可哈希: 不可变的数据类型,int str tuple bool

# set集合要求储存的数据必须是可以哈希计算的
# 可变的数据类型,list,dict set

 # 插入

s = set()

s.add("马牛逼")
s.add("呲花")
print(s) #结果:{'马牛逼', '呲花'}

# 删除 

s = {'马牛逼', '呲花'}
s.pop()   #弹出最后一个,很少用它,因为没有顺序
print(s) # {'呲花'}
s = {'马牛逼', '呲花'}
s.remove("呲花")
s.add("沈腾")
print(s) #结果:{'马牛逼', '沈腾'}

# 遍历

for item in s:
    print(item) #结果:马牛逼 呲花

# 并集,交集,差集

s1 = {"刘能","赵四","皮长山"}
s2 = {"刘科长","冯乡长","皮长山"}


print(s1 & s2)  # 交集  {'皮长山'}


print(s1 | s2)  # 并集  {'刘能', '冯乡长', '皮长山', '刘科长', '赵四'}

print(s1 - s2)  # 差集  {'刘能', '赵四'}

# 去重复

s1 = {"周杰伦","昆凌","蔡依林","美猴王"}
print(s1) 结果:{'美猴王', '昆凌', '蔡依林', '周杰伦'}

s1.add("周杰伦")
print(s1) 结果:{'美猴王', '昆凌', '蔡依林', '周杰伦'}

7.字典

7.1 字典的特性

# 首先,字典是以键值对的形式进行存储数据的
# 字典的表示方式:{key:value,key2:value,key3:value}
# 字典的key必须是可哈希的数据类型
# 字典的value可以是任何数据类型
dic = {"jay": "周杰伦", "金毛狮王": "谢逊"}

val = dic["jay"]
print(val)
dic = {[]:123}
print(dic) #结果:unhashable type: 'list' 报错


dic = {"汪峰的孩子":["孩子1","孩子2"]}
print(dic) # 结果:{'汪峰的孩子': ['孩子1', '孩子2']}

7.2 字典的增删查改

# 增加

dic = dict()

dic["jay"] = "周杰伦"
dic[1] = 123
print(dic)  #结果:{'jay': '周杰伦', 1: 123}
dic = {'jay': '昆凌', 1: 123}
dic.setdefault("tom","胡辣汤") # 设置默认值
print(dic) #结果:{'jay': '昆凌', 1: 123, 'tom': '胡辣汤'}

# 修改

dic = {'jay': '周杰伦', 1: 123}
dic["jay"] = "昆凌"
print(dic) #结果:{'jay': '昆凌', 1: 123}

# 删除

dic = {'jay': '昆凌', 1: 123, 'tom': '胡辣汤'}
dic.pop("jay")  #  根据key去删除
print(dic) # 结果:{1: 123, 'tom': '胡辣汤'}

# 查询

dic = {'jay': '昆凌', 1: 123, 'tom': '胡辣汤'}
print(dic["jay"]) #结果:昆凌
print(dic.get("jay")) #结果:昆凌
#例子:
dic = {
    "赵四":"特别能歪嘴",
    "刘能":"老,老四啊",
    "大脚":"根这个和那个搞对象",
    "大脑袋":"瞎折腾。。。"
}
name = input("输入你想知道的名字:") #输入:刘能
val = dic.get(name)
print(val) #结果:"老,老四啊"

7.3 字典的进阶操作-循环和嵌套

dic = {
    "赵四":"特别能歪嘴",
    "刘能":"老,老四啊",
    "大脚":"根这个和那个搞对象",
    "大脑袋":"瞎折腾。。。"
}
# 1.可以用for循环,直接拿到key
for key in dic:
    print(key,dic[key])  

#结果:
赵四 特别能歪嘴
刘能 老,老四啊
大脚 根这个和那个搞对象
大脑袋 瞎折腾。。。
# 2.希望所有的key全部保存在一个列表中
print(list(dic.keys()))  #拿到所有的key了

# 结果:['赵四', '刘能', '大脚', '大脑袋']
# 3.希望把所有的value都放在一个列表中
print(list(dic.values()))

#结果:['特别能歪嘴', '老,老四啊', '根这个和那个搞对象', '瞎折腾。。。']
# 4.直接拿到字典中的key和value
print(list(dic.items()))

#结果:[('赵四', '特别能歪嘴'), ('刘能', '老,老四啊'), ('大脚', '根这个和那个搞对象'), ('大脑袋', '瞎折腾。。。')]
for key,values in dic.items():
    print(key,values)

#结果:
赵四 特别能歪嘴
刘能 老,老四啊
大脚 根这个和那个搞对象
大脑袋 瞎折腾。。。

#嵌套

# 字典的嵌套
wangfeng = {
    "name":"汪峰",
    "age": "章子怡",
    "wife":{
        "name":"章子怡",
        "hobby":"演戏",
        "assistant":{
            "name":"樵夫",
            "age":"19",
            "bobby":"打游戏"
        }
    },
    "children":[
        {"name":"孩子1","age":13},
        {"name":"孩子1","age":12},
        {"name":"孩子1","age":13},
    ]
}
# # 汪峰妻子的助手的名字
print(wangfeng["wife"]["assistant"]["name"])
# # 给汪峰第二个孩子加一岁
wangfeng["children"][1]["age"] = wangfeng["children"][1]["age"] + 1
print(wangfeng)

# 循环和删除

dic = {
    "赵四":"特别能歪嘴",
    "刘能":"老,老四啊",
    "大脚":"根这个和那个搞对象",
    "大脑袋":"瞎折腾。。。"
}

temp = []
for key in dic:
    if key.startswith("大"):
        temp.append(key)

for t in temp:  #循环列表,删除字典中的内容
    dic.pop(t)
print(dic)

8.bytes(字节)

1.字符集编码
0 1 《=》 1010101010 =》二进制转化成十进制 《=》 88
电脑如何进行储存文字信息
10000000 =》 a
ascii =》 编排了128个文字符号,只需要七个0和1就可以表示了,01111111  =》 byte

ansi =》 一套标准,每个字符 16bit,2byte
00000000 01111111

中国,gb2312, gbk编码(windows 默认的就是这个) 16bit 2byte
01000000 01010101 =》中国


unicode: 万国码

utf:是可变长度的unicode,可以进行数据的传输和储存
utf-8:最短的字节长度8
      英文: 8bit,1byte
      中文: 24bit,3byte

utf-16:最短的字节长度16

2.bytes

程序员平时遇见的所有的数据最终单位都是字节byte

# 编码
s = "周杰伦"

bs1 = s.encode("gbk")
bs2 = s.encode("utf-8")
print(bs1) # 结果:b'\xd6\xdc\xbd\xdc\xc2\xd7'
print(bs2) # 结果:b'\xe5\x91\xa8\xe6\x9d\xb0\xe4\xbc\xa6'
#解码
bs = b'\xd6\xdc\xbd\xdc\xc2\xd7'
b = bs.decode("gbk")
print(b) #结果:周杰伦

9.运算符

"""
1. 算数运算
    + - * / % //
2. 比较运算
    > < >= <= == !=
3. 赋值运算
    =  +=, -=, *=.....
    a += b
    a = a + b

    n = 1
    sum = 0
    while n <= 100:
        sum = sum + n  # sum += n
        n = n + 1      # n += 1

4. 逻辑运算
    1. and, 并且, 左右两端同时成立. 结果才能成立
    2. or,  或者, 左右两端有一个成立. 结果就成立
    3. not, 非,   非真既假, 非假既真.

    当and和or以及not同时出现的时候. 最好呢. 加上括号. 不会产生歧义或者不易理解的问题
    如果没有括号怎么办?
    记住运算顺序:
        先算括号 > 算not > and  > or

5. 成员运算
    in     判断xxx是否在xxxx中出现了
    not in 判断xxx是否不在xxxx中出现了
"""

 1. 算数运算

a = 20
b = 3
c = a % b  # 10 / 3 = 3.....1
d = a // b
print(c) # 2
print(d) # 6

2.比较运算

a = 20
b = 20
print(a != b) #结果:ture

3.逻辑运算1

#逻辑运算
print(True and True and True and False) #false
print(False or True or False or False) #ture
print( not False) #ture

 10.文件操作

"""
1.找到这个文件,打开它


open(文件路径,mode="",encoding=“”)
   文件路径:
       1.绝对路径
          d:/test/xxx.txt
       2.相对路径
          相对于当你的程序所在的文件夹

          ../ 上一层文件夹
   mode:
      r : read 读取
      w : write 写
      a : append 住家写入
      b : 读写的是一个非文本文件 --》 bytes

   with :上下文,不需要手动去关闭一个文件


"""

 10.1 打开文件

open("国产.txt")
open("../葫芦娃.txt")  # 上一级的文件夹下
open("../01_初识python/课件/06_变量.txt")

10.2 读文件

#读文件
f = open("国产.txt",mode="r",encoding="utf-8")


print(f.read()) # f.read 全部读取


print(f.readline().strip()) #f.readline 读取一行


print(f.readline().strip())  # 去掉字符串左右两端的空白,空格,换行符,制表符


print(f.readlines())  # 一行一行,会读取文件放到列表里


# 最重要的一种文本读取方式(必须掌握)
for line in f:
    print(line.strip())

10.3 写入文件

w模式下,如果文件不存在,自动创建一个文件
w模式下,每一次open都会清空掉文件中的内容
f = open("嫩模.txt",mode="w",encoding="utf-8")
f.write("胡辣汤")

f.close()  # 每次操作以后最好把链接关闭


lst = ["张无忌","汪峰","赵敏"]
f = open("倚天屠龙记",mode="w",encoding="utf-8")

for item in lst:
    f.write(item)
    f.write("\n")

结果:

# a模式
# a模式 (在末尾追加)
f = open("打架.txt", mode="a", encoding="utf-8")
f.write("你好厉害")

 

# with 不用手动close
with open("国产.txt", mode="r", encoding="utf-8") as f:  # f = open()
    for line in f:
        print(line.strip())
# 想要读取图片
# 在读写非文本文件的时候要加上b
with open("yljy.jpeg", mode="rb") as f:
    for line in f:
        print(line)

结果:

10.4  文件的复制

# 从源文件中读取内容. 写入到新路径去
with open("胡一菲.jpeg", mode="rb") as f1, \
     open("../01_初识python/胡二飞.jpeg", mode="wb") as f2:
     for line in f1:
         f2.write(line)

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

激进的猴哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值