Python入门基础(第3天):基本数据类型
一、基本数据类型
1、数字
通常的int, long,float,long等等都被支持。而且会看你的具体数字来定义变量的类型。
# int 类型 # bit_length() 返回一个数的二进制长度
2、字符串
单引号,双引号和三引号都可以用来定义字符串。三引号可以定义特别格式的字符串。字符串作为一种序列类型,支持像Matlab一样的索引访问和切片访问。
# str 类型 # 由',",''',"""括起来的内容就是字符串 # 字符串是不可变的数据类型,无论执行任何操作,源字符串都不会改变,每次操作返回新字符串
(1)、索引和切片
# 1.索引
# 索引从0开始,使用[下标]可以获取每一个字符 # 例如: s="基本数据类型" #(下面都使用这个为例) print(s[1]) #结果为:本 print(s[-1]) #结果为:型 # 索引不能超过边界 # 负下标表示倒着数
# 2.切片
# 切片[起始位置:结束位置] 1、不包括结束位置 2、只能从左往右切
# 例如:
print(s[1:4]) #从1开始切到4,但取不到4
#结果为:本数据
print(s[1:]) #结束位置可以任意,超了也没事,从头取到尾也可不写
print(s[:4]) #与上面相反
#结果为:本数据类型
# 三个参数切片来控制方向,第三个参数叫步长
# 切片[起始位置:结束位置:步长]
# print(s[2:4:2]) #从2开始取,到4结束,不包括4,每两个取一个,取前面第一个
#结果为:数
print(s[-1:-5:-2]) #表示反方向,从右往左,每两个取第一个
#结果为:型据
3、布尔型
布尔类型只有True(真)和False(假)两种值,表判断,加 not 取反。
# 所有的空都是false,所有的非空都是true # 例如 int a=0 # 例如 str a=”“ # 例如 tuple() # 例如 list[] # 例如 {}
4、元组
元组tuple用()来定义。相当于一个可以存储不同类型数据的一个数组。可以用索引来访问,但需要注意的一点是,元祖里面的元素不能被修改。
# 元祖 #只能读,不能读写操作 # tu=tuple() #空元祖 tu=(1,245,54,12,2) #如果元祖中只有一个元素,需要在里面加一个逗号 print(tu[1:3])#切片可以用 print(tu[2])#索引可以用
tu=(1,"he","how are you?",[])
tu[3].append("小何")#内部列表元素可变
print(tu)
# range()可迭代对象 #range(m) 表示0~m-1 for i in range(10): #循环输出0-9 print(i) # range(m,n) 表示m~~n-1 for i in range(2,10): print(i) #range(m,n,q) 表示m~~n-1,没q个取一个 for i in range(2,10,2): print(i) #获取索引然后拿元素 lst=["dsd","sdsdwed","sdssdsddddd","sdwewew","fdfdf"] for i in range(len(lst)): print(lst[i])
5、列表
列表list用[]来定义。它和元组的功能一样,不同的一点是,里面的元素可以修改。List是一个类,支持很多该类定义的方法,这些方法可以用来对list进行操作。
(1)列表的增删改查
# 列表的增删改查 # 增加 lst=["张三","李四","王五","赵柳","谷歌","马云"] lst.append("何东洋")#末尾追加,只能追加一个元素 lst.insert(1,"王力宏")#指定位置插入 # 迭代追加两种形式 lst.extend("马化腾") lst.extend(["是多少","都是","圣达生物"]) print(lst) # 删除 lst=["张三","李四","王五","赵柳","谷歌","马云"] data=lst.pop(2) #返回被删除的数据 print(data) lst.remove("李四") #指定删除元素,如果没有删除的元素就报错 del lst[1:2]#切片删除1-2个元素 # del lst[3]#切片删除第三个元素 lst.clear()#清空列表 print(lst) # 修改 lst=["王者荣耀","魔兽世界","地下城","反恐精英","穿越火线"] lst[3]="扫雷" #指定位置索引修改 lst[1:3]=["QQ飞车"] #先删除后添加,添加一个元素 lst[1::2]=["QQ炫舞","QQ空间"] #切片的时候,如果步长不是1,注意元素个数 print(lst) # 查询 lst=["王者荣耀","魔兽世界","地下城","反恐精英","穿越火线"] #循环查找列表内所有元素 for element in lst: print(element)
(2)列表的嵌套
# 列表的嵌套 list=["leil","sd",["大Q吧",["he","100","dsss"],"QQ飞车"]] # 查询 print(list[2][1][1]) #指定查找元素100 # 修改 list[2][1][0]=list[2][1][0].upper() #修改某个元素为大写 print(list)
# 排序 lst=[1,5,3,47,21,58,1,23,45,21,2] lst.sort() #排序,默认升序 lst.sort(reverse=True) # reverse=true表示降序 lst=["王者荣耀","魔兽世界","地下城","反恐精英","穿越火线"] lst.reverse()#在字符串中表示翻转 print(lst)
#列表日常练习 li=["alex","wuseier","HEDY","barry","alex","alex"] # print(len(li)) #计算长度 # li.append("sever") #最加一个元素 # li.insert(1,"tony") #指定位置插入 # li[3]="kelly" #指定位置修改 # l2=[1,"a",3,4,"hers"] # li.extend(l2) #将l2添加到li列表中 # s="qwet" # li.extend(s) #将每个元素添加到列表中 # li.remove("HEDY")# 删除指定元素 # data=li.pop(3)#删除索引元素 # print(data)#打印删除的内容 # del li[2:4] #切片删除第2-4个元素 # li.reverse() #翻转元素内容 # #统计出现的次数 # s="alex" # sum=0 # for i in li: # if(i==s): # sum=sum+1 # print(sum) # list=[2,3,"k",["qwe",23,["kk",["tt",45,"ds"],"1"]]] # list[3][2][1][0]=list[3][2][1][0].upper() #指定位置变大写 # list[3][2][1][1]="100" #方法1:直接更改某个元素数字为字符串 # list[3][2][1][1]=str(list[3][2][1][1]+55) #方法2:强制转换 # print(list) # # 利用下划线将每个元素进行拼接 # li=["he","dong","yang"] # s='' # for i in li: # s=s+i+'_' # print(s[:-1]) # # 打印元素索引,内容 # li=["he","dong","yang","cheng","xu","yuan"] # for i in range(len(li)): # print(li[i]) # #利用for循环和range找出100内的偶数并添加到一个新列表 # list=[] # for i in range(101): # if i%2==0: # list.append(i) # print(list) #利用for循环、while循环和range从100-1,倒序打印 # for i in range(100,0,-1): # print(i) # #while循环 # count=100 # while count>0: # count=count-1 # print(count) # # 利用for循环和range从100-10倒序将所有偶数添加到新列表中,并将能被4整除的保存下来 # li=[] # for i in range(100,9,-1): # if i%2==0 and i%4==0: # li.append(i) # print(li) # # 用户输入用户,匹配到敏感词就自动替换为***,并将输入的内容添加到新列表中 # lst=["王者荣耀","魔兽世界","地下城","反恐精英","穿越火线"] # content=input("请输入内容:") # li1=[] # for i in lst: # if i in content: # content=content.replace(i,'*'*len(i)) # li1.append(content) # print(li1) # #将结果打印成如下形式: # ''' # 1 # 2 # 4 # "hedyang" # 4 # 78 # 98 # "taobao" # 88 # "tainan" # ''' # li=[1,2,4,"heDyang",[4,78,98,"TAoBao"],88,"TAiNan"] # for i in li: # if type(i)==list: # for el in i: # if type(el)==str: # print(f'"{el.lower()}"') #格式化输出,加引号 # else: # print(el) # else: # if type(i)==str: # print(f'"{i.lower()}"') # else: # print(i) # # 把学生成绩录入列表中,并求平均值,要求:带着人名录入,如:张三_88 # list=[] # while 1: # content = input("输入姓名_成绩(输入Q退出):") # if content.lower()=='q': # break # else: # s=content.split('_')#以_分割 # list.append(s[1]) # sum=0 # for j in list: # sum+=int(j) # print(sum/len(list))
6、字典
字典dictionary用{ }来定义。它的优点是定义像key-value这种键值对数据的结构,就像struct结构体的功能一样。它也支持字典类支持的方法进行创建和操作。
1. 字典 dictionary 用{}来表示 键值对数据 {key : value} 唯一性 键 必须都是可哈希的 不可变的数据类型可当做键 值 没有任何限制 2.增删改查 dic[key]=value dic.setdefault(key,value) 如果键在字典中存在则不进行操作,否则就添加 可以通过key查询,没有这个key就返回None ---------------------------------------------------------------- pop(key) 有返回值 返回的是被删除的value del dic[key] 指定删除 popitem() 随机删除 clear() 清空字典 ----------------------------------------------------------------- dic[key]= value 直接修改 dic.update(字典) 替换新增 ----------------------------------------------------------------- get(key) 直接查看 dic[key] for循环 setdefault(key) ----------------------------------------------------------------- 3. 字典的其他操作 keys 获取到所有的键在一个高仿列表中 values 获取到所有的值在一个高仿列表中 items 获取所有的键值对应元组的形式存在一个高仿的列表中 解构: a,b=[1,2] #同a,b=12 a,b='12' a,b=(1,2) //将后面结构打开按位置赋值给前面变量 可以是字符串,元组,列表等
#字典(key,value)——练习 # 增加 dic={'盖聂':'渊虹','卫庄':'鲨齿','高渐离':'水寒剑','白凤':'羽毛','盗跖':'神偷'} dic['掩日']='火影' #新增在末尾 dic.setdefault('大铁锤','雷神锤') #如果key在字典中存在就不进行任何做操作,不存在就添加 dic.setdefault('盖聂','雷神锤') print(dic) # 删除 dic={'盖聂':'渊虹','卫庄':'鲨齿','高渐离':'水寒剑','白凤':'羽毛','盗跖':'神偷'} data=dic.pop('盖聂') #同过key删除,返回被删除的value print(data) del dic['白凤'] #指定删除 dic.clear() #清空 ret=dic.popitem() #随机删除 返回值 一个元祖(key,value) print(ret) # 修改 dic={'盖聂':'渊虹','卫庄':'鲨齿','高渐离':'水寒剑','白凤':'羽毛'} dic1={'孙悟空':'大师兄','猪八戒':'二师兄','高渐离':'易水寒'} dic['盖聂']='大叔' #强制修改 dic1.update(dic) #dic1覆盖dic,如果没有就直接在前面添加 print(dic) # 查看 dic2={'孙悟空':'大师兄','猪八戒':'二师兄','高渐离':'易水寒'} # for 循环 元组 键 值 键值对 for i in dic2: print(i) #for循环默认获取字典中的键(key) print(dic2['猪八戒']) #查看1 没有这个键的时候查询会报错 print(dic2.get('hah','没有你找的内容')) #查询2 没有就返回默认值None 可以指定返回类容 # 其他操作 dic3={'孙悟空':'大师兄','猪八戒':'二师兄','高渐离':'易水寒'} print(dic3.keys()) #高仿列表 获取每个键 print(dic3.values()) #高仿列表 获取每个值 print(dic3.items()) #高仿列表 元组 for i in dic3.keys(): print(i) #获取到字典中的每一个键 for i in dic3.values(): print(i) #获取到字典中的每一个值 for i in dic3.items(): print(i) #以元组形式获取[('key','value')] # 解构(解包) a,b=[1,2] #同a,b=12 a,b='12' a,b=(1,2) //将后面结构打开按位置赋值给前面变量 print(a) #实例 print(b) dic={'孙悟空':'大师兄','猪八戒':'二师兄','高渐离':'易水寒'} for a,b in dic.items(): print(a) #拿出所有数据 print(b) # 批量创建字典key dic={} date=dic.fromkeys([1,2,3,4],'指定内容') #批量创建字典key,value默认为None,可指定内容 print(date) # 字典嵌套 dict={'name':'He','age':'22','aa':[{'hobby':'coed'}, {'stu':'332017'}],'bb':[{'成绩':'88','时间':'2020'}],'salary':'100000'} a=dict['aa'][1][0]=20200227 #强制修改332017,没有会报错 b=dict.get('bb')[0].get('成绩') #没有这个键会提示none,不会报错 print(a) print(b)
(1)作业1:有字符串"k:1|k1:2|k2:3|k3:4",处理成字典{‘k’:1,'k1':2,'k2':3,'k3':4}
s="k:1|k1:2|k2:3|k3:4" new_li=s.split("|") #以|为分割 dict={} print(new_li) for i in new_li: k,y=i.split(":") dic[k]=int(v) print(dic)
(2)作业2:有下值li=[11,22,94,44,55,66,77,88,48,90],将所有大于66的值保存至字典第一个key中,将小于66的值保存至第二个key中,即:{'k1':大于66的所有值,'k2':小于66的所有值}
li=[11,22,94,44,55,66,77,88,48,90] dic={'k1':[],'k2':[]} for i in li: if i==66: continue elif i>66: dic.setdefault('k1').append(i)#setdefault存在不做任何操作,append追加在末尾 else: dic.setdefault('k2').append(i) print(dic)
(3)输出商品列表,用户输入序号,显示用户选中的商品
''' 要求: 1,显示页面: 序号 商品名称 商品价格 2,用户输入选择的商品序号,然后显示商品名称和价格 3,用户输的商品序号有误,进行提示 4,用户输入Q或者q,退出程序 ''' goods=[{'name':"电脑",'price':1999},
{'name':"鼠标",'price':99},
{'name':"键盘",'price':599},
{'name':"显示器",'price':999}] while 1: for i in goods: print(goods.index(i)+1,i['name'],i['price']) content=input("请输入商品序号,输入Q/q退出:") if content.upper()=='Q': break elif content.isdigit() and 0<int(content)<len(goods): i_index=int(content)-1 print(goods.[i_index]['name'],goods.[i_index]['price']) else: print("输入有误")
7、range()可迭代对象
# range()可迭代对象 #range(m) 表示0~m-1 for i in range(10): #循环输出0-9 print(i) # range(m,n) 表示m~~n-1 for i in range(2,10): print(i) #range(m,n,q) 表示m~~n-1,每q个取一个 for i in range(2,10,2): print(i) #获取索引然后拿元素 lst=["dsd","sdsdwed","sdssdsddddd","sdwewew","fdfdf"] for i in range(len(lst)): print(lst[i])
二、常用基本属性用法
a=" heLLo wOrlD funk " #以下均以次为例 #大小写转换 a1=a.capitalize() #首个单词字母变大写 a1=a.title() #把每一个单词的首字母变大写 a2=a.lower() #全部变成小写 a2.casefold() #全部变成小写(能转换特殊字母) a3=a.upper() #全部变成大写 a4=a.swapcase() #大小写互换,即大写变小写,小写变大写 #居中 a5=a.center(20,"-") #居中,没有-默认空格 #去空格 a6=a.strip() #去除左边和右边的多余空格 a7=a.strip("w") #去掉其中某些字符 a8=a.lstrip() #去掉左边的空格 a9=a.rstrip() #去掉右边的空格
s="heLLo_hello_hesdaa_hewOrlD_hefunk" s1=s.replace("he","XXX",2) #(源字符,需要替换内容,次数) #替换字符串中某个字符 s2=s.split("_") #切完的结果是一个列表,列表中装的是字符串,用什么切就会损失什么 #如果全部切完,会产生两个空字符串,如果超出源字符,不切 #格式化输出 s="我叫{1},今年{0},喜欢{2}".format("hh","20","shu") #和%s功能一样,括号内加数字制定顺序,不加数字默认顺序 s1="我叫{name},今年{age},喜欢{hobby}".format(name="hh",age="20",hobby="shu") #指定输出 #判断开头结尾 s="heLLo_hello_hesdaa_hewOrlD_hefunk" s1=s.startswith("he") #是否以XXX开头 s2=s.endswith("funk") #是否以XXX结尾 #统计次数 s3=s.count("h") #统计XX在字符串中出现的次数 s4=s.find("f") #查找XX首次在字符串中出现的位置,没有就返回-1 s5=s.index("k") #查找XX出现的位置,没有就报错 #字符串组成 s6=s.isdigit() #判断是否由数字组成 s7=s.isalnum() #判断是否由数字和字母组成 s8=s.isalpha() #判断是否由字母组成 s9=s.isnumeric() #判断是否由中文数字组成 #字符串长度 print(len(s)) #字符串长度
#迭代
for 变量 in 可迭代对象:
作业1:
1 # #1.去除两边空格 2 name=" heLlowoRlD " 3 s1=name.strip() 4 print(s1) 5 6 #2.去除字符串中的w 7 s2=name.lstrip("w") 8 print(s2)
作业2:
#切片 name="123a4b5cheLlowoRlD" print(name[:3]) print(name[3:6]) print(name[::2]) print(name[-1::-3])
作业3:
#用while、for循环输出每个元素 name="123a4b5cheLlowoRlD" n=0 while n<len(name): print(name[n]) n=n+1 #for循环 for c in name: print(c)
作业4:
#循环输出每个字符并每个字符结尾加sb name="123a4b5cheLlowoRlD" for c in name: print(c+"sb")
作业5:
#使用for循环对s="321"进行循环,并依次打印内容 s="321" for c in s: print("倒计时%s秒" % c) print("计时开始!")
作业6:
#实现两个整数的加法计算并去用户除空格 content=input("请输入两个数(X + X):") content=content.replace(" ","") #去空格 s=content.split("+") #用+号切割,切割结果是list类型 sum=int(s[0])+int(s[1]) print(sum)
作业7:
#用户持续输入内容,选择正确即可退出循环 while 1: content=input("请选择(A,B,C):") if content=='A': print("你选择走大路回家!") content1=input("请选择公交车还是步行?") if content1=="公交车": print("10分钟后到家!") break elif content1=="步行": print("20分钟后到家!") break elif content=='B': print("走小路回家!") break elif content =='C': print("绕道回家!") content2 = input("游戏厅or网吧?") if content2=="游戏厅": print("你想等着挨打吧,再选择一次!") continue elif content2 == "网吧": print("滚犊子,给你一次改正的机会!") continue
作业8:
1 #计算1-2+3-4……+99除了88以外的所有数总和 2 num=1;sum=0; 3 while num<=99: 4 if num==88: 5 pass 6 num = num + 1 7 if num%2==0: 8 sum=sum-num 9 else: 10 sum=sum+num 11 num=num+1 12 print(sum)
作业9:
#判断用户输入的数或者字符串是否为回文数 content=input("请输入数字或字符串:") if content==content[::-1]: print("是回文数") else: print("不是回文数")
作业10:
#输入一个字符串,判断有多少大写字母和小写字母等 daxie=0 xiaoxie=0 number=0 other=0 content=input("请输入一段字符串:") for s in content: if s.isupper(): daxie=daxie+1 elif s.isupper(): xiaoxie=xiaoxie+1 elif s.isdigit(): number=number+1 else: other=other+1 print(daxie,xiaoxie,number,other)
作业11
#判断是否在百家姓中 first_name="百家姓省略……" sum="" name=input("请输入一个姓名:") for s in name: sum=sum+s#累加 if sum in first_name: print("在百家姓中") break else: print("不在百家姓中")
--来自爱说爱笑,浑身骄傲,不哭不闹,无视嘲笑,我是小尾巴,我为自己代言。