#一、列表和列表操作
stus = ["张柏芝","朱一龙","王凯"] #一维数组
stus2 = [1,2,3,4, ['a','b','c','d'] ] #2维数组
stus3 = [1,2,3,4,['a','b','c','d',['test','dev','pre']]] #三维数组
list = [] #空列表
list = list() #空列表
#取值
print(stus3[4][4][1]) #test
#增
msg = '杨紫'
stus = ["张柏芝","朱一龙","王凯"]
stus.append(msg) #在list的末尾增加一个元素
stus.insert(1,msg) #从指定位置插入元素,这个1代表下标
#如果指定的下标不存在,那么会把元素插入到最后
#查
msg = '杨紫'
stus = ["张柏芝","朱一龙","王凯"]
print('单个取',stus[0]) #h获取第一个元素
print('最后一个元素',stus[-1]) #-1代表最后一个元素
#查询可以通过for循环遍历
# for 循环遍历字符串
# for 变量 in 可迭代对象
# 循环体
#
stus = ['chengweiliang','chenqi','guoliwen']
for stu in stus:#for循环直接循环一个list,就是取list里面的每一个元素
print('每次循环取的值',stu)
username = 'szz-'+stu
print(username)
#改
stus = ["张柏芝","朱一龙","王凯"]
stus[4] = 'baby' #修改指定位置的值
print('改之后的',stus)
#
#删
stus = ["张柏芝","朱一龙","王凯"]
stus.remove('王凯') #删除指定的值,如果list里面有多个一样的元素,那么就只会删掉一个
del stus[0] #删除指定位置的值
stus.pop() #不传入下标的话,删除最后一个值
stus.pop(2) #传入下标删除指定位置的值
stus.clear() #python3清空列表
#其他常用方法
stus = ["张柏芝","朱一龙","王凯"]
print(stus.count('王凯')) #某个元素在list里面的数量
new_stus = stus.copy()#复制一个
print(new_stus)
stus.reverse() #反转数组,会改变原数组的值
nums = [9,23,12,234,23,5235,235,235,23523,523]
print(stus.sort()) #排序,从小到大排序,根据ASCII来排序
print(stus.sort(reverse=True)#排序,从大到小排序
stus.extend(nums) #扩展列表,也就是把nums的值加到stus里面
print(stus.index('王凯')) #找某个元素的下标
#range
range() 可迭代对象
range(参数) [0, 参数)
range(参数1,参数2) [参数1, 参数2)
range(参数1,参数2,step) [参数1,参数2) 每隔step取一个
#
# # 重点
for i in range(len(lst)):
i 索引
lst[i] 元素
print(i, lst[i])
stus = ['zhangbaizhi','zhiyilong','wangkai']
for i in range(len(stus)): #b
username = stus[i]
print(username)
l = list(range(3))
print(l) #[0, 1, 2]
stus = ['zhangbaizhi','zhiyilong','wangkai']
username=''
#sql='insert into user (username,password) value ("%s","%s");'%(username,password)
password='123456'
index = 0
while index<len(stus):
username = stus[index]
username = 'szz-'+username
sql='insert into user (username,password) value ("%s","%s");'%(username,password)
print(sql)
index+=1
#切片
names = ['andashu', 'cc', 'niuniu', 'amy', 'lily']
print(names[1:4]) #取下标1至下标4之间的值,包括1,不包括4,顾头不顾尾,['cc', 'niuniu', 'amy']
print(names[1:-1]) # 取下标1至末尾,不包括-1(末尾)['cc', 'niuniu', 'amy']
print(names[0:3]) # 从0取到3,不包括3,['andashu', 'cc', 'niuniu']
print(names[:3]) # 取下标0至3的值,不包括3,和上一条效果一样,0可以省略不写,['andashu', 'cc', 'niuniu']
print(names[2:]) # 取从第二个下标开始的后面所有元素,['niuniu', 'amy', 'lily']
# # 下面是加步长的
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(nums[::2]) # 这个代表取所有的元素,然后每个2个元素取一个,# 执行结果>>> 1,3,5,7,9
print(nums[1:8:3]) # 代表取第二个元素开始,到第8个元素,隔3个取一次,执行结果2,5,8
print(nums[5:1:-1]) #倒序取,[6,5,4,3]
#二、字典
#字典以key:value形式存储,{}表示,是无序的
stu_info = \
{
'username':'qx',
'password':'123456',
'money':20,
'addr':'上海'
}
#字典的key是唯一的。相同key会覆盖前面的
#字典的增删改查
d1 = {} #创建空字典
d2 = dict() #创建空字典
# #增:
d1['name'] = '胖妞'#没有就新增,有就修改
d1['age'] = 18
d1.setdefault('class','双子座')
print('之前的',d1) #之前的 {'name': '胖妞', 'age': 18, 'class': '双子座'}
d1.setdefault('age',30) #如果使用setdefault,key已经存在了,就不会修改原来key的值
print('之后的',d1) #不会修改age的值 之后的 {'name': '胖妞', 'age': 18, 'class': '双子座'}
d1['name'] = '胖妞2' #没有就新增,有就修改
print('之后的2',d1) #{'name': '胖妞2', 'age': 18, 'class': '双子座'}
#改:
d1['name'] = '胖妞3'
#删除:
d1.pop('name')#标准的删除方法,若key不存在报错
del d1['name']#使用del方法删除,若key不存在报错
d1.popitem() #随机删除一个值
d1.clear() #清空
#查询:
id.get('name')#获取name的信息,这种方式如果key不存在的话,会返回None
id['name']#获取name的信息,这种方式如果key不存在的话,会报错
'name' in id #判断name是否在这个字典中,返回True或者False
#内置方法:
dic = {'stu1':'cc','stu2':'andashu','stu3':'niuniu'}
print(dic.values())#打印所有value,执行结果['andashu', 'niuniu', 'cc']
print(dic.keys())#打印所有的key,执行结果['stu2', 'stu3', 'stu1']
print(dic.setdefault('stu1','fengluo'))#如果这个key存在的话,那就不动它,不存在的话,添加一个,cc
dic2 = {'stu1':'sriba','stu10':'baidu'}
dic.update(dic2)#更新字典值,将字典dic2加入到字典dic如果key存在的话,就更新,不存在的话就添加
print(dic.items())#字典转换成一个list,拿到所有的键值对,
# 执行结果[('stu2', 'andashu'), ('stu3', 'niuniu'), ('stu1', 'sriba'), ('stu10', 'baidu')]
#循环字典
users = {
"niuhanyang":'123456sdf',
"niuhanyang2":'123456sd',
"niuhanyang3":'123456sdf',
"niuhanyang4":'1234sdf56',
"niuhanyang5":'12345gsdfs6',
"niuhanyang6":'1234324g56'
}
#把字典里面每个用户的密码,前面都加上 username_ +
#1、循环这个字典
#2、把value修改成value = key_+value
for k in users: #直接循环一个字典的话,循环的是key
value = users[k] #通过key取到value
users[k] = '%s_%s'%(k,value)
print(users)
for k,v in users.items():
print('%s===>%s'%(k,v))
users[k] = '%s_%s' % (k,v)
print(users[k])
stus = [
{"name":"小白","age":18,'addr':"北京"},
{"name":"小黑","age":28,'addr':"上海"},
{"name":"小hong","age":28,'addr':"上海"},
{"name":"小zi","age":28,'addr':"上海"},
{"name":"小lv","age":28,'addr':"上海"},
{"name":"小5","age":28,'addr':"上海"}
]
for stu in stus:
stu['phone'] = '159111111'
print(stus)
stus = {
"胖妞":
{
"house": ['三环', "四环", "七环"],
"car": {
"日本": ["雷克萨斯", "英菲尼迪"],
"中国": ['五菱宏光', '红旗', '比亚迪', "宝骏"],
"美国": ["福特", "凯迪拉克"]
},
"化妆品": {
"SK-2": 1000,
"YSL": 8000
}
},
"陆明":{
"money":[1000,5000,8000,800000],
"xifu":{
"越南":2,
"伊拉克":10,
"韩国":2,
"泰国":3
}
}
}
#1、统计胖妞总共有多好辆车
cars = stus["胖妞"]["car"]
# print (cars)
carcount = 0
for car in cars.values():
# print(car)
# print(len(car))
carcount += len(car)
print("胖妞共有%s辆车!" %carcount)
# #2、胖妞又买了,德国车2辆,奥迪、奔驰
stus["胖妞"]["car"].update({"德国":["奥迪",'奔驰']})
print(stus)
# #3、胖妞的化妆品全被男朋友扔了
stus["胖妞"].pop("化妆品")
print(stus)
#三、元组
#元组与列表不同的是,元组的值不能改变,可以查询,迭代for循环
mysql_coon = ('192.168.1.109','root','123456',3306,'my_db')#定义元组,定义好后不可修改,修改会报错
# #元组只有两个方法index和count
print(mysql_coon[0])
print(mysql_coon.count('root'))
print(mysql_coon.index("root"))
# #元组只有一个元素时,要加","
tu = (1,)
#四、字符串和字符串操作
str = ' ca th y '
#字符串去除空格方法
print(str.strip()) #默认去掉两边的空格和换行
print(str.lstrip()) #默认去掉左边的空格和换行
print(str.rstrip()) #默认去掉右边的空格和换行
#去除字符串全部空格
#1、使用replace
# replace主要用于字符串的替换replace(old, new, count)
print(str.replace(' ',''))
#2、使用join+split
# join为字符字符串合成传入一个字符串列表,split用于字符串分割可以按规则进行分割
str = ''.join(str.split())
# str.split() #字符串按空格分割成列表
''.join(str.split()) #使用一个空字符串合成列表内容生成新的字符串
print(str)
#3、使用正则表达式
import re
str = re.sub(r"\s+","",str,flags=re.UNICODE)
print(str)
print(str.index('d')) #查找字符串的索引,找不到报错
print(str.find('d')) #查找字符串的索引,找不到返回-1
str = 'cathy'
print(str.capitalize()) #首字母大写
print(str.lower())#全部变成小写
print(str.upper())#全部变成大写
print(str.replace('c','C',1))#替换字符串
print('abc.jpg'.endswith('.jpg'))#判断是否以XX结尾,返回True,False
print('abc'.startswith('c')) #判断是否以XX开头,返回True,False
print("欢迎登陆".center(100,'*')) #把欢迎登陆放中间,前后补*达到100个字符
print(str.zfill(40)) #指定长度的字符串,原字符串右对齐,前面填充0
print(str.expandtabs(30))#补当前字符串中\t的次数
username = 'cathy'
today = '2019-04-02'
str2 = '欢迎{}登陆,今天的日期是{}.'
print(str2.format(username,today))#格式字符串
str3 = '欢迎{username}登陆,今天的日期是{today}.'
print(str3.format(username = 'cathy',today = '20190403'))
print(str3.format_map({'username':'cathy','today':'20190403'})) #格式字符串字典类型
print(' '.isspace()) #判断是否为空格
print('123abc'.isalnum())#是否包含数字和字母,没有%%##@特殊字符串就返回true
print('abc'.isalpha())#是否是英文字母,不是数字、不是特殊符号就返回true
print('122'.isdigit())#是否是数字
print('aa'.isidentifier())#是否是一个合法的变量名
print('aa'.islower())#是否是小写字母
print('AA'.isupper())#是否是大写字母
print('Loadrunner Book'.istitle())#是不是一个标题,判断首字符是否是大写
print('+'.join(['hehe','haha','ee']))#拼接字符串,hehe+haha+ee
###maketrans() 方法用于给 translate() 方法创建字符映射转换表
##python3.4以后不需要从外部string模块来调用maketrans()方法,用内建函数bytearray.maketrans()、bytes.maketrans()、str.maketrans()。
##python3中:
##p = str.maketrans('abcdefg','1234567')#前面的字符串和后面的字符串做映射
##第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串,表示转换的目标。两个字符串的长度必须相同,为一一对应的关系
##print('cc ae gg'.translate(p))##输出按照上面maketrans做映射后的字符串
##python2中:
import string
p = string.maketrans('abcdefg','1234567')
print('cc ae gg'.translate(p))#结果为33 15 77
print('mysql is is db'.rfind('is'))#返回最右边字符的下标
print('1+2+3+4'.split('+'))#切割字符串,返回一个list
print('1+2+3\n1+2+3+4'.splitlines())#按照换行符分割
print('Abcdef'.swapcase())#大小写反转
s="""
寂寞当然有一点
你不在我身边
总是特别想念你的脸
距离是一份考卷
测量相爱的誓言
最后会不会实现
我们为爱还在学
学沟通的语言
学着谅解
学着不流泪
等到我们学会飞
飞越黑夜和考验
日子就要从孤单里毕业
我们用多一点点的辛苦
来交换多一点点的幸福
就算幸福
还有一段路
等我们学会忍耐和付出
这爱情一定会有张证书
证明
从此不孤独
从此不孤独
"""
# 字符串是不能被修改的
file_name = input('请上传文件,文件只能是zip压缩包')
if file_name.endswith('.zip'):
print('没问题')
else:
print('文件格式错误!')
# 三元运算符
# 三元运算就是在赋值变量的时候,可以直接给它加上判断后,再赋值
# 用法:res = 值1 if 条件 else 值2
a = 5
b = 4
c = a if a>b else b #如果a>b ,c=a,否则c=b,不用三元运算,则如下面的写法
if a > b:
c = a
else:
c= b
#三元运算符用于列表和字典
nums = [1,2,3,4,5,6,7,8,9,10]
#old_num = [num for num in nums if num%2!=0]
#循环num,如果nums里面的值,不能被2整除的话,就写到old_num 列表中。等于下面的写法:
old_num = []
for num in nums:
if num % 2 !=0:
old_num.append(num)