一,字符串
字符串就是一系列数字,在python中,用引号引起来的都是字符串,其中的引号可以是单引号,也可以
是双引号
符串或串(String)是由数字、字母、下划线组成的一串字符。
一般记为 :
s=“a1a2···an”(n>=0)
它是编程语言中表示文本的数据类型。
python的字串列表有2种取值顺序:
从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
二,列表
1,List(列表) 是 Python 中使用最频繁的数据类型。
#Author:Anliu
name = “\tpython\t”
print(name)
print(name.rstrip())
print(name.lstrip())
print(name.strip())
2,列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。
3,列表用 []标识,是 python 最通用的复合数据类型。
4,列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
5,加号 + 是列表连接运算符,星号 * 是重复操作。如下实例:
[‘runoob’, 777, 3.14, ‘anliu’, 70.2]
runoob
[777, 3.14]
[3.14, ‘anliu’, 70.2]
[123, ‘john’, 123, ‘john’]
[‘runoob’, 777, 3.14, ‘anliu’, 70.2, 123, ‘john’]
查:(切片操作)
#!/bin/evn python
#-- coding:utf-8 --
#Author:Anliu
list = [‘runoob’,777,3.14,‘anliu’,70.2]
tinylist = [123,‘john’]
print(list)
print(list[0])
print(list[1:3])
print(list[2:])
print(tinylist * 2)
print(list + tinylist)
#Author:Anliu
#names = “zhangsan lisi wanger”
names =[“zhangsan”,“lisi”,“wanger”]
print(names)
print(names[0])
print(names[2])
print(names[:2])
print(names[2:])
排序按照ACSII码的顺序。
增:
1 在列表末尾添加元素
2 在列表中插入元素
3 复制
names = [“zhangsan”,“lisi”,“wanger”,“xx”]
print(names[names.index(“xx”)])
names = [“zhangsan”,“lisi”,“wanger”,“xx”,“lisi”]
print(names.count(“lisi”))
names = [“zhangsan”,“lisi”,“wanger”,“xx”,“lisi”]
names.reverse()
print(names)
#Author:Anliu
names = [“zhangsan”,“lisi”,“wanger”,“xx”,“lisi”]
names.sort()
print(names)
#Author:Anliu
names = [“zhangsan”,“lisi”,[“wanger”,“xx”],“lisi”]
for i in names:
print(i)
#Author:Anliu
names = [“zhangsan”,“lisi”,“wanger”,“xx”,“lisi”]
names2 = [“dasfh”,“gsfs”,"",“bcvbfj”]
names.extend(names2)
print(names)
print(names2)
#Author:Anliu
names = [“zhangsan”,“lisi”,“wanger”]
names.append(“mazi”)
print(names)
#Author:Anliu
names = [“zhangsan”,“lisi”,“wanger”]
names.insert(0,“xxx”)
print(names)
第二层不变:
两层都变:
所以copy是一种“浅copy”
这种方法两层都copy,是一种“深copy”
实际上“浅copy”有三种方式
“浅copy”在类似于共同账号的场景中有所应用,例如:
#Author:Anliu
names = [“zhangsan”,“lisi”,“wanger”,“xx”,“lisi”]
names2 = names.copy()
print(names)
print(names2)
#Author:Anliu
names = [“zhangsan”,“lisi”,“wanger”,“xx”,“lisi”]
names2 = names.copy()
names[2] = “王二”
print(names)
print(names2)
#Author:Anliu
names = [“zhangsan”,“lisi”,[“wanger”,“xx”],“lisi”]
names2 = names.copy()
names[2][0] = “王二”
print(names)
print(names2)
#Author:Anliu
import copynames = [“zhangsan”,“lisi”,[“wanger”,“xx”],“lisi”]
names2 = copy.deepcopy(names)
names[2][0] = “王二”
print(names)
print(names2)
#Author:Anliu
import copy
persnotallow=[“name”,[‘a’,100]]
p1 = copy.copy(person)
p2 = person[:]
p3 = list(person)
print(p1,p2,p3)
删:
1 使用del语句删除
2 使用方法pop()删除元素
默认删除最后一个元素
3 弹出列表中任何位置处的元素
如果你确定使用del语句还是pop()方法,就这样判断:如果你要存列表中删除一个元素,切不在以任何
方式使用它,就用del语句;如果你要在删除元素之后还能继续使用它,就用pod()方法。
三,元组
元组是另一个数据类型,类似于 List(列表)。
元组用 () 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表。
#!/bin/evn python
#-- coding:utf-8 --
#Author:Anliu
tuple = (‘runoob’, 786, 2.23, ‘john’, 70.2)
tinytuple = (123, ‘john’)
print(tuple) # 输出完整元组
print(tuple[0]) # 输出元组的第一个元素
print(tuple[1:3]) # 输出第二个至第四个(不包含)的元素
print(tuple[2:]) # 输出从第三个开始至列表末尾的所有元素
print(tinytuple * 2) # 输出元组两次
print(tuple + tinytuple) # 打印组合的元组
元祖就其本质而言,就是一个不可变列表,不像列表一样能够修改元素。
四,字典
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典
是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
增,删,改,查:
#!/bin/evn python
#-- coding:utf-8 --
#Author:Anliu
tuple = (‘runoob’, 786, 2.23, ‘john’, 70.2)
tinytuple = (123, ‘john’)
print(tuple) # 输出完整元组
print(tuple[0]) # 输出元组的第一个元素
print(tuple[1:3]) # 输出第二个至第四个(不包含)的元素
print(tuple[2:]) # 输出从第三个开始至列表末尾的所有元素
print(tinytuple * 2) # 输出元组两次
print(tuple + tinytuple) # 打印组合的元组
#!/bin/evn python
#-- coding:utf-8 --
#Author:Anliu
dict = {}
dict[‘one’] = “This is one”
dict[2] = “This is two”
tinydict = {‘name’: ‘john’, ‘code’: 6734, ‘dept’: ‘sales’}
print(dict[‘one’]) # 输出键为’one’ 的值
print(dict[2]) # 输出键为 2 的值
print(tinydict) # 输出完整的字典
print(tinydict.keys()) # 输出所有键
print(tinydict.values()) # 输出所有值
五,集合
集合:集合是一个无序的,不重复的数据集合,可以使用大括号 { } 或者 set() 函数创建集合,注意:创
建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
六,编写登录接口
import json
_username = input(“请注册账号:”) //注册账号并设置初始密码
_password = input(“请输入初始密码:”)
user = {“user”: _username,
“passwd”: _password
}
with open(“passwd”, “w”, encoding=(“utf-8”)) as f: //将账号和密码写入文件,永久保存
json.dump(user, f)with open(“passwd”, “w”, encoding=(“utf-8”)) as f:
json.dump(user, f)
//第一次注册完成后将此段代码注释再次运行
try: //抓住异常后锁定账号
with open(“passwd”, “r”) as f: //读文件
_user = (json.load(f))
_username = _user[“user”]
_password = _user[“passwd”]
f.close()
except json.decoder.JSONDecodeError:
print(“您的账号已经锁定,请联系管理员…”)
exit()i = 0
while i < 3:
username = input(“username:”)
password = input(“password:”)
if username == _username and password == _password:
print(“logining …”)
exit()
else: //输入账号和密码超过3次后
if i == 2:
with open(“passwd”, “a”) as f:
f.write("#")
print(“用户账号已锁定…”)
else:
print(“username or password err…”)
print(“请在输入一次…”)
i += 1
七,流程控制
1,break语句
break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循
环语句。
2,continue语句
1)continue 语句跳出本次循环,而break跳出整个循环。
2)continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。
3)continue语句用在while和for循环中。
3,pass语句
1)Python pass 是空语句,是为了保持程序结构的完整性。
2)pass 不做任何事情,一般用做占位语句。
八,购物车程序
product_list = [
(‘Robot’,200000),
(‘MacPro’,12000),
(‘Iphone8’,8888),
(‘Hello World’,1200),
]
shopping_list = []
user_salary=input(“请输入你的工资:”)
if user_salary.isdigit():
user_salary = int(user_salary)
while True:
print(“商品如下:”)
for index,item in enumerate(product_list):
print (index,item)
user_choice = input("请输入要购买的商品编号:")
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice < len(product_list) and user_choice > -1:
p_item = product_list[user_choice]
if user_salary>=p_item[1]:
shopping_list.append(p_item)
user_salary-=p_item[1]
print("购买商品",p_item,"成功您的余额为",user_salary,"元!" )
else:
print("您的余额为",user_salary,"余额不足以购买此商品,购买失败!")
else:
print("并无此产品!")
elif user_choice == "q":
print("--------shopping list-------")
for i in shopping_list:
print(i)
exit()
else
print("请重新输入正确数字")