Python基础学习(一)

Python基础语法学习记录

输出

将结果或内容呈现给用户

print("休对故人思故国,且将新火试新茶,诗酒趁年华")
# 输出不换行,并且可以指定以什么字符结尾
print("青山依旧在",end= ",")
print("几度夕阳红",end= "。")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.数据类型

2.1 整型(int)

print(222)
print(2 ** 2)  # 2的2次方
print(10 / 2)

2.2 字符串(str)

# 单引号和双引号一样
print("Hello World")
print("上海市浦东新区")
print("我是'艾伦'")
# """表示多行字符串
print("""
人生到处何所似,
应是飞鸿踏雪泥。
"""
)

对于字符串:

  • 拼接: +
  • 乘:整型和字符串进行相乘,实现字符串重复出现N次并拼接
print(3 * "我想吃拉面")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.3 布尔类型(bool)

bool类型种共有两个值:True/False

print(1 > 2)
print(False)
print(True)
print(1 == 1)name = input("请输入你的用户名: ")
if name.lower() == "zed":print(name + "登录成功")
else:print("登录失败")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

补充:

1 == ‘Alan’ # 可以比较

1 > ‘Alan’ # 不可以进行比较

2.4 数据类型转换

不同的数据类型有不同的功能,如果想要做转换,可遵循一个原则,想转换什么类型就让它包裹住

如:str(666)是将整型转化为字符串,int(“888”)是将字符串转为整型

类型转换

  • 其他所有类型转为布尔类型时,除了空字符串、0以外其他都是True;
  • 字符串转为整型时,只有是数字类型的字符串(“669”)才可转换为整型,其他都报错;
  • 想要转换为哪种类型,就用这个类型的英文包裹一下就可以

str(…)

int(…)

bool(…)

3.变量

注意:

  • 给变量赋值;
  • 让age代指某个值;
name = "Zed"
age = 24
flag = 1 > 2
print(name)
print(age)
print(flag)

3.1 变量名的规范

三个规范:

  • 变量名由字母、数字、下划线组成;
  • 不能以数字开头;
  • 不能用Python内置的关键字;

变量内存指向

情景一

name = "sushi"

在计算机的内存中创建一块区域保存字符串”sushi”,name变量名则指向这块区域。

image-20201011163312491

情景二

name = "sushi"
name = "alex"

在计算机的内存中创建一块区域保存字符串”sushi”,name变量名则指向这块区域。然后又再内存中创建了一块域保存字符串”alex”,name变量名则指向”alex”所在的区域,不再指向”sushi”所在区域(无人指向的数据会被标记为垃圾,由解释器自动化回收)

image-20201011163344305

情景三

name = "sushi"
new_name = name

在计算机的内存中创建一块区域保存字符串”sushi”,name变量名则指向这块区域。new_name变量名指向name变量,因为被指向的是变量名,所以自动会转指向到name变量代表的内存区域。

image-20201011163427166

情景四

name = "sushi"
new_name = name
name = "alex"

在计算机的内存中创建一块区域保存字符串”sushi”,name变量名则指向这块区域(灰色线), 然后new_name指向name所指向的内存区域,最后又创建了一块区域存放”alex”,让name变量指向”alex”所在区域.

image-20201011163503412

情景五

num = 18
age = str(num)

在计算机的内存中创建一块区域保存整型18,name变量名则指向这块区域。通过类型转换依据整型18再在内存中创建一个字符串”18”, age变量指向保存这个字符串的内存区域。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.注释

  • 单行注释
# 声明一个name变量
name = 'Alan'
  • 多行注释
"""
这是一个多行注释
这是一个多行注释
这是一个多行注释
这是一个多行注释
"""

5.输入

实现用户与程序之间的交互

# 接收用户输入的变量
name = input("请输入用户名: ")

特别注意:

用户输入的任何内容都是字符串;

6.条件语句

if 条件:...
else:...

6.1 基本条件语句

  • 示例1

    username = "sushi"
    password = "666"
    if username == "sushi" and password == "666":print("恭喜你,登录成功")
    else:print("登录失败")
    
  • 示例2

    username = "sushi"if username == "sushi" or username == "alex":print("VIP大会员用户")
    else:print("普通用户")
    
  • 示例3

    number = 19
    if number%2 == 1:print("number是奇数")
    else:print("number是偶数")
    
    number = 19
    data = number%2 == 1
    if data:print("number是奇数")
    else:print("number是偶数")
    
  • 示例4

    if 条件:成立
    
    print("开始")
    if 5 == 5:print("5等于5")
    print("结束")
    

6.2 多条件判断

if 条件A:A成立,执行此缩进中的所有代码...
elif 条件B:B成立,执行此缩进中的所有代码...
elif 条件C:C成立,执行此缩进中的所有代码...
else:上述ABC都不成立。

6.3 条件嵌套

if 条件A:if 条件A1:...else...
elif 条件B:...

模拟10086客服

print("欢迎致电10086,我们提供了如下服务: 1.话费相关;2.业务办理;3.人工服务")choice = input("请选择服务序号")if choice == "1":print("话费相关业务")cost = input("查询话费请按1;交话费请按2")if cost == "1":print("查询话费余额为100")elif cost == "2":print("交互费")else:print("输入错误")
elif choice == "2":print("业务办理")
elif choice == "3":print("人工服务")
else:print("序号输入错误")

7. 循环语句

  • while循环
while 条件:.........
  • for循环

7.1 循环语句基本使用

num = 1
while num < 4:print("2024发大财")num += 1

7.2 break 终止循环

break,用于while循环中终止循环;

7.3 continue结束本次循环

continue, 在循环中用于结束本次循环,开始下一次循环;

7.4 while else

当while后的条件不成立时,else中的代码就会执行

while 条件:代码
else:代码
num = 1
while num < 5:print("2024一夜暴富")num += 1
else:print("2024一定会发财")

8. 字符串格式化

8.1 %格式化

# 引入
name = "苏东坡"
age = 18
text = "我叫%s,今年%d岁" %(name,age)
message = "%(name)s你什么时候过来呀?%(user)s今天不在呀。" % {"name": "死鬼", "user": "李杰"}
print(message)
8.1.2 百分比特殊处理
text = "%s,这个片我已经下载了90%%了,居然特么的断网了" %"兄弟"
print(text)
# 输出:
兄弟,这个片我已经下载了90%了,居然特么的断网了

8.2 format格式化(推荐)

text1 = "我叫{0}, 今年{1}岁".format("Alan",19)
text2 = "我叫{0}, 今年{1}岁,真实姓名是{0}".format("Alan",19)
print(text1)
print(text2)
################################
text = "我叫{n1},今年18岁".format(n1="Alan")
text = "我叫{n1},今年{age}岁".format(n1="Alan",age=18)
text = "我叫{n1},今年{age}岁,真是的姓名是{n1}。".format(n1="Alan",age=18)
################################
# 先定义格式化字符串,再调用format方法传递参数
text = "我叫{0},今年{1}岁"
data1 = text.format("Alan",666)
data2 = text.format("alex",73)
address = "{0}市{1}区{2}街道"
print(address.format("上海","浦东新","溜溜"))

8.3 f格式化(Python3.6之后)

hobby1 = "打游戏"
hobby2 = "打球"
message = f"我喜欢{hobby1},还喜欢{hobby2}"
###
输出: 我喜欢打游戏,还喜欢打球  
###

9. 运算符

9.1 算数运算符

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9.2 比较运算符

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9.3 赋值运算

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9.4 成员运算

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

9.5 逻辑运算

image-20240101153946726

10. Python数据类型

常见数据类型:

  • int,整数类型
  • bool,布尔类型
  • str,字符串;
  • list,列表类型;
  • tuple,元组类型;
  • dict,字典类型;
  • set,集合类型;
  • float,浮点型;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

10.1 整型

10.1 定义
number = 10
age = 99
10.2 独有功能

v1 = 5
print(bin(v1))  # 0b101
# 调用v1(int)的独有功能,获取v1的二进制有多少个位组成。
result1 = v1.bit_length()
print(result1)  # 3v2 = 10
print(bin(10))  # 0b1010
# 调用v2(int)的独有功能,获取v2的二进制有多少个位组成。
result2 = v2.bit_length()
print(result2)  # 4
10.3 公共功能

加减乘除

v1 = 4
v2 = 8
v3 = v1 + v2
10.4 转换

在项目开发和面试题中经常会出现一些 “字符串” 和 布尔值 转换为 整型的情况。

# 布尔值转整型
n1 = int(True)  # True转换为整数 1
n2 = int(False) # False转换为整数 0# 字符串转整型
v1 = int("186",base=10) # 把字符串看成十进制的值,然后再转换为 十进制整数,结果:v1 = 186
v2 = int("0b1001",base=2) # 把字符串看成二进制的值,然后再转换为 十进制整数,结果:v1 = 9 (0b表示二进制)
v3 = int("0o144",base=8)  # 把字符串看成八进制的值,然后转换为 十进制整数,结果:v1 = 100 (0o表示八进制)
v4 = int("0x59",base=16)  # 把字符串看成十六进制的值,然后转换为 十进制整数,结果:v1 = 89 (0x表示十六进制)# 浮点型(小数)
v1 = int(8.7) # 8

所以,如果以后别人给你一个按 二进制、八进制、十进制、十六进制 规则存储的字符串时,可以轻松的通过int转换为十进制的整数。

10.5 其他
10.5.1 长整型
  • Python3:整型(无限制)
  • Python2:整型、长整形

在python2中跟整数相关的数据类型有两种:int(整型)、long(长整型),他们都是整数只不过能表示的值范围不同。

image-20201102190227431
  • int,可表示的范围:-9223372036854775808~9223372036854775807
  • long,整数值超出int范围之后自动会转换为long类型(无限制)。

在python3中去除了long只剩下:int(整型),并且 int 长度不在限制。

10.5.2 地板除
  • Py3:

    v1 = 9/2 
    print(v1) # 4.5
    
  • py2:

    v1 = 9/2 
    print(v1) # 4
    
    from __future__ import division v1 = 9/2 
    print(v1) # 4.5
    

10.2 布尔型

10.3 字符串

"xxxx".方法名(参数)s = "xxx"
s.方法名(...)
10.3.1 判断字符串是否以XX为开头startswith
# 案例
s.startswith("北京市")
10.3.2 判断字符串是否以XX结尾endswith
s.endswith("大厦")
10.3.3 判断字符串是否是整数
message.isdecimal()
10.3.4 判断字符串是否为十进制数
v1 = "123"
print(v1.isdecimal()) # Truev2 = "①"
print(v2.isdecimal()) # Falsev3 = "123"
print(v3.isdigit()) # Truev4 = "①"
print(v4.isdigit()) # True
10.3.5 去除字符串两边的空格、换行符、制表符,得到一个新字符串
msg = " H e ll o啊,树哥 "
data = msg.strip()
print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树哥"msg = " H e ll o啊,树哥 "
data = msg.lstrip()
print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树哥 "msg = " H e ll o啊,树哥 "
data = msg.lstrip()
print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树哥 "

案例:

# 案例
code = input("请输入4位验证码:") #  FB88   fb88 
value = code.upper() #  FB88  
data = value.strip() # FB88if data == "FB87":print('验证码正确')
else:print("验证码错误")# 注意事项
"""
code的值"fb88 "
value的值"FB88 "
data的值"FB88"
"""

去除两边指定的内容:

msg = "哥H e ll o啊,树哥"
data = msg.strip("哥")
print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树"
10.3.5 字符串变大写
msg = "my name is the flash"
data = msg.upper()
print(data) # MY NAME IS THE FLASH
10.3.6 字符串变小写
msg = "MY NAME IS THE FLASH"
data = msg.lower()
print(data) # my name is the flash
10.3.7 字符串的替换
data = "你是个好人,但是好人不合适我"
value = data.replace("好人","贱人")
print(data)  # "你是个好人,但是好人不合适我"
print(value) # "你是个贱人,但是贱人不合适我"# 案例
video_file_name = "喜剧片.mp4"
new_file_name = video_file_name.replace("mp4","avi") # "喜剧片.avi"
final_file_name = new_file_name.replace("喜剧","科幻") # "科幻片.avi"
print(final_file_name)
10.3.8 字符串的切割
data = "Alan|root|alan@qq.com"
result = data.split('|') # ["Alan","root","alan@qq.com"]
result2 = data.split('|', 1) # 切一个,遇到第一个切
result3 = data.rsplit('@') #
print(data) # "Alan|root|alan@qq.com"
print(result) # 输出 ["Alan","root","alan@qq.com"] 根据特定字符切开之后保存在列表中,方便以后的操作
10.3.9 字符串的拼接
data_list = ["Alan", "", "a", "huge","man"]
new_str = " ".join(data_list) # Alan is a huge man
print(new_str)
10.3.10 格式化字符串
address = "{0}市{1}区{2}街道"
data = address.format("上海","浦东新", "潍坊")
print(data) #上海市浦东新区潍坊街道
10.3.11 字符串转为字节类型
data = "苏东坡"  # unicode,字符串类型v1 = data.encode("utf-8")  # utf-8,字节类型
v2 = data.encode("gbk")  # gbk,字节类型print(v1)  # b'\xe8\x8b\x8f\xe4\xb8\x9c\xe5\x9d\xa1'
print(v2)  # b'\xcb\xd5\xb6\xab\xc6\xc2's1 = v1.decode("utf-8") # 苏东坡
s2 = v2.decode("gbk") # 苏东坡
print(s1)
print(s2)
10.3.12 字符串内容居中、居左、居右显示
v1 = "王老汉"
# data = v1.center(21, "-")
# print(data) #---------王老汉---------# data = v1.ljust(21, "-")
# print(data) # 王老汉------------------# data = v1.rjust(21, "-")
# print(data) # ------------------王老汉
10.3.13 给字符串填充0
data = "alex"
v1 = data.zfill(10)
print(v1) # 000000alex
# 应用场景:处理二进制数据
data = "101" # "00000101"
v1 = data.zfill(8)
print(v1) # "00000101"
10.3.14 公共功能

1、相加,字符串拼接

2、相乘,字符串 * 整数

3、长度

data = "zed"
print(len(data)) # 3

4、获取字符串中的字符,索引

message = "北京欢迎你"
print(message[0]) # 北
print(message[1]) # 京
print(message[2]) # 欢

字符串中是能通过索引取值,无法修改值;

5、获取字符串中的子序列,切片

message = "就像阳光穿破黑夜"
print(message[0:2]) # 就像
print(message[2:]) # 阳光穿破黑夜
print(message[:2]) # 就像print(message[6:-1]) # 黑
print(message[6:len(message)]) # 黑夜

字符串切片自己读取数据,无法修改数据

6、步长,跳着取字符串的内容

name = "生活不是电影,生活比电影苦"print( name[ 0:5:2 ] )   # 输出:生不电 【前两个值表示区间范围,最有一个值表示步长】
print( name[ :8:2 ] )    # 输出:生不电,  【区间范围的前面不写则表示起始范围为0开始】、
# print( name[ 2::2 ] )    # 输出:不电,活电苦
# print( name[ 2::3 ] )    # 输出:不影活影print( name[ 2::3 ] )    # 输出:不电,活电苦 【区间范围的后面不写则表示结束范围为最后】
print( name[ ::2 ] )     # 输出:生不电,活电苦 【区间范围不写表示整个字符串】
print( name[ 8:1:-1 ] )  # 输出:活生,影电是不 【倒序】

7、循环

  • while循环
message = "休对故人思故国,且将新火试新茶,诗酒趁年华"
index = 0
while index < len(message):print(message[index])index += 1
  • for循环
message = "休对故人思故国,且将新火试新茶,诗酒趁年华"
for char in message:print(char)
  • range:帮助创建一系列数字
range(10) # [0,1,2,3,4,5,6,7,8,9]
range(1, 10) # [1,2,3,4,5,6,7,8,9]
range(1, 10, 2) #[1,3,5,7,9]
range(10, 1, -1) # [10,9,8,7,6,5,4,3,2]
  • for + range:
for i in range(10)print(i)
message = "休对故人思故国,且将新火试新茶,诗酒趁年华"
for i in range(5):print(message[i])
####################
for i in range(len(message)):print(message[i])
10.3.15 字符串类型转换
num = 999
data = str(num)
print(data) # "999"
10.3.16 字符串不可被修改
name = "Alan"

11.4 列表(list)

列表(list),是一个可变的容器,在里面可以存放多个不同类型的元素

11.4.1 定义
user_list = ["李白","苏轼","辛弃疾"]
number_list = [92,93,94,95]
data_list = [1,True,"Alan", "张楚岚"]
user_list = []
user_list.append("盖聂")
user_list.append(123)
user_list.append(False)
print(user_list) # ["盖聂",123,False]

不可变类型:字符串、布尔、整型

可变类型:列表

11.4.2 独有功能

1、追加,在原有列表中尾部追加值

data_list = []
data_list.append("s1")
data_list.append("s2")

2、批量追加,将一个列表中的元素逐一添加到另外一个列表

tools = ["板砖","菜刀"]
weapon = ["AK47","MP5"]
tools.extend(weapon)print(tools)

3、插入,在原列表的指定索引位置插入值

user_list = ["李白","杜甫","白居易"]
user_list.insert(1,"王维") # ["李白","王维","杜甫","白居易"]

4、在原列表中根据值删除(从左到右找到第一个删除,慎用!里面没有会报错)

user_list = ["李白","苏轼","辛弃疾","孙笑川"]
if "孙笑川" in user_list:user_list.remove("孙笑川")
print(user_list)

5、在原列表中根据索引删除某个元素(根据索引位置删除)

user_list = ["李白","苏轼","辛弃疾","孙笑川"]
user_list.pop(1) # 删除索引为1的元素
user_list.pop() #删除最后一个元素 ["李白","辛弃疾"]item = user_list.pop()

6、清空原列表

user_list = ["李白","苏轼","辛弃疾","孙笑川"]
user_list.clear()
print(user_list) # []

7、根据值获取索引(从左到右找到第一个,慎用!找不到会报错)

user_list = ["李白","苏轼","辛弃疾","孙笑川"]
if "孙笑川" in user_list:index = user_list.index("孙笑川")
print(index) # 3

8、列表元素排序

user_list = ["李白","苏轼","辛弃疾","孙笑川"]
user_list.sort()
print(user_list) # 默认从小到大排序
print(user_list.sort(reverse=True)) # 从大到小排序
# 注意:排序时内部元素无法进行比较时,程序会报错(尽量数据类型统一)

9、反转原列表

user_list = ["李白","苏轼","辛弃疾","孙笑川"]
user_list.reverse()
print(user_list) # 列表会反转
11.4.3 公共功能

1、相加,两个列表相加获取生成一个新的列表

data_list1 = ["李白","杜甫"]
data_list2 = ["苏轼","辛弃疾"]data_list3 = data_list1 + data_list2
print(data_list3) # ["李白","杜甫","苏轼","辛弃疾"]

2、相乘(列表*整型,将列表中的元素再创建N份并生成一个新的列表)

data_list = ["李白","杜甫"] * 2
print(data_list) # ["李白","杜甫","李白","杜甫"]

3、运算符in包含

由于列表内部是由多个元素组成,可以通过in来判断元素是否在列表中

user_list = ["李白","杜甫","苏轼","白居易"]
result1 = "白居易" in user_list
result2 = "辛弃疾" in user_list
print(result1) # True
print(result2) # False

4、获取长度

user_list = ["李白","杜甫","苏轼","白居易"]
print(len(user_list)) # 4

5、索引

user_list = ["李白","杜甫","苏轼","白居易"]
print(user_list[3]) # 白居易
del user_list[0] #删除第0个元素

6、切片

# 读
user_list = ["范德彪","刘华强",'尼古拉斯赵四']print( user_list[0:2] ) # ["范德彪","刘华强"]
print( user_list[1:] )
print( user_list[:-1] )
# 改
user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[0:2] = [11, 22, 33, 44]
print(user_list) # 输出 [11, 22, 33, 44, '尼古拉斯赵四']user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[2:] = [11, 22, 33, 44]
print(user_list) # 输出 ['范德彪', '刘华强', 11, 22, 33, 44]user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[3:] = [11, 22, 33, 44]
print(user_list) # 输出 ['范德彪', '刘华强', '尼古拉斯赵四', 11, 22, 33, 44]user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[10000:] = [11, 22, 33, 44]
print(user_list) # 输出 ['范德彪', '刘华强', '尼古拉斯赵四', 11, 22, 33, 44]user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
user_list[-10000:1] = [11, 22, 33, 44]
print(user_list) # 输出 [11, 22, 33, 44, '刘华强', '尼古拉斯赵四']
# 删
user_list = ["范德彪", "刘华强", '尼古拉斯赵四']
del user_list[1:]
print(user_list) # 输出 ['范德彪']

7、步长

user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
#              0        1        2          3       4
print( user_list[1:4:2] ) # 刘华强 宋小宝
print( user_list[0::2] ) # 
print( user_list[1::2] ) # 
print( user_list[4:1:-1] ) # 刘能 宋小宝 尼古拉斯赵四
# 案例:实现列表的翻转
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
new_data = user_list[::-1]
print(new_data)data_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
data_list.reverse()
print(data_list)# 给你一个字符串请实现字符串的翻转?
name = "12345"
name[::-1]

8、for循环

user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]
for item in user_list:print(item)
user_list = ["范德彪","刘华强",'尼古拉斯赵四',"宋小宝","刘能"]for index in range( len(user_list) ):item = user_index[index]print(item)

切记,循环的过程中对数据进行删除会踩坑

# 错误方式, 有坑,结果不是你想要的。user_list = ["刘的话", "范德彪", "刘华强", '刘尼古拉斯赵四', "宋小宝", "刘能"]
for item in user_list:if item.startswith("刘"):user_list.remove(item)print(user_list)
# 正确方式,倒着删除。
user_list = ["刘的话", "范德彪", "刘华强", '刘尼古拉斯赵四', "宋小宝", "刘能"]
for index in range(len(user_list) - 1, -1, -1):item = user_list[index]if item.startswith("刘"):user_list.remove(item)
print(user_list)
11.4.4 转换
  • int、bool无法转换成列表
  • 字符串转成列表没有意义;
name = "苏东坡"
list(name) # ["苏","东","坡"]
  • 元组、集合转成list
v1 = (11,22,33,44)
vv1 = list(v1) # [11,22,33,44]v2 = {"alex", "alan","otto"}
vv2 = list(v2) # ["alex", "alan", "otto"]
11.4.5 其他

嵌套

data = ["赵四",["1","2","3"],True, [11,22,[33,44]]]

11.5 元组(tuple)

列表(list):是一个有序且可变的容器,在里面可以存放多个不同类型的元素;

元组(tuple):是一个有序且不可变的容器,在里面可以存放多个不同类型的元素;

11.5.1 定义
v1 = (11,22,33)
v2 = ("小明","Alan")
v3 = (True,123,"Alex",[11,22,33])
# 建议:在元组的最后一个元素后面多加一个逗号,用来表示它是一个元组
v3 = ("Alan",11, ) 
11.5.5 公共功能

1、相加,两个列表相加获取一个新的元组

v1 = ("小明","小亮")
v2 = ("张三","李四")
v3 = v1 + v2
print(v3) # ("小明","小亮","张三","李四", )

2、相乘,列表*整型,将列表中的元素再创建N份

v1 = ("小明","小亮")
print(v1*2)

3、获取长度

user_tuple = ("小明","小亮","张三")
print(len(user_tuple)) # 3

4、索引

user_tuple = ("小明","小亮","张三")
print(user_tuple[1]) #小亮

5、切片

user_tuple = ("小明","小亮","张三")
print(user_tuple[0:2]) # 小明 销量

6、步长

user_tuple = ("小明","小亮","张三","李四","王五")
print(user_tuple[1:4:2])
print(user_tuple[4:1:-1])
# 反转tuple
new_user_tuple = user_tuple[::-1]
print(new_user_tuple)

7、for循环

user_tuple = ("小明","小亮","张三","李四","王五")
for item in user_tuple:print(item)for item in user_tuple:if item == "张三":continueprint(item)

目前,只有str、list、tuple可以被for循环

11.5.3 转换

其他类型转换为元组,使用tuple(其他类型),目前只有字符串和列表可以转换为元组

data = tuple(其他)
# str/list
11.5.4 嵌套

由于元组和列表都可以充当容器,他们内部也可以放多个元组,并且也支持元素内的嵌套

12.6 set集合

set集合:无序、可变、不允许数据重复的容器

12.6.1 定义
v1 = {1,"22",True,"Alex"}
  • 无序:无法通过索引定位值

  • 可变:可以添加和删除元素

    v1 = {11,22,33}
    v1.add(44)
    print(v1) # {11,22,33,44}
    
  • 不允许数据重复

    v1 = {11,22,33}
    v1.add(11)
    print(v1) # 11 22 33
    

什么时候用到集合:

想要维护一大堆不重复的数据的时候,就可以用它,比如:做爬虫去网上找图片链接时,为了避免数据重复,可以选择用集合去存储链接地址

注意:定义空集合时候,只能使用v=set{},不能使用v={}(这样定义是一个空字典)

12.6.2 独有功能

1、添加元素

data = {"苏东坡","白居易","辛弃疾"}
data.add("欧阳修")
print(data)
data = set()
data.add("周杰伦")
data.add("薛之谦")
print(data)

2、删除元素

data = {"苏东坡","白居易","辛弃疾","王富贵"}
data.discard("王富贵")
print(data)

3、交集

s1 = {"苏东坡","白居易","辛弃疾","王富贵"}
s2 = {"李白","杜甫","王勃","王富贵"}
s3 = s1 & s2 #取两个集合的交集
s4 = s1.intersection(s2) # 王富贵
print(s3,s4)

4、并集

s1 = {"苏东坡","白居易"}
s2 = {"李白","杜甫"}
s3 = s1 | s2
s4 = s1.union(s2)
print(s3,s4)

5、差集

s1 = {"刘能","赵四","皮常山"}
s2 = {"刘科长","赵市长","皮常山"}
s3 = s1 - s2 #取差集,s1中有且s2中没有的值
s3 = s1.difference(s2) #取差集,s1中有且s2中没有的值
12.6.3 公共功能

1、减,计算差集

2、&,取交集

3、|,计算并集

4、长度

v1 = {"张三","李四","王五"}
data = len(v1)
print(data)

5、for循环

v1 = {"张三","李四","王五"}
for item in v1:print(item)
12.6.4 转换

其他类型如果想转换成集合类型,使用set(其他类型),如果数据有重复会自动删除

注意: int/list/tuple/dict都可以转换为集合

12.6.5 其他
12.6.5.1 集合的存储原理
image-20201120193837492
12.6.5.2 元素必须可哈希

因存储原理,集合的元素必须是可哈希的值,即:内部通过通过哈希函数把值转换成一个数字。

image-20201120190454120

目前可哈希的数据类型:int、bool、str、tuple,而list、set是不可哈希的。

总结:集合的元素只能是 int、bool、str、tuple 。

  • 转换成功

    v1 = [11,22,33,11,3,99,22]
    v2 = set(v1)
    print(v2) # {11,22,33,3,99}
    
  • 转换失败

    v1 = [11,22,["alex","eric"],33]
    v2 = set(v1) # 报错 
    print(v2) 
    
12.6.5.3 查找速度特别快
user_set = {"苏东坡","alex","李璐"}
if "alex" in user_set:print("在")
else:print("不在")
12.6.5.4 对比和嵌套
类型是否可变是否有序元素要求是否可哈希转换定义空
listlist(其他)v=[]或v=list()
tupletuple(其他)v=()或v=tuple()
set可哈希set(其他)v=set()

注意:由于True和False本质上存储的是 1 和 0 ,而集合又不允许重复,所以在整数 0、1和False、True出现在集合中会有如下现象:

v1 = {True, 1}
print(v1)  # {True}v2 = {1, True}
print(v2)  # {1}v3 = {0, False}
print(v3)  # {0}v4 = {False, 0}
print(v4)  # {False}
None类型

Python中有一个特殊的值None类型,表示为空

目前可以转换为False的值有:

0
""
[] or list()
() or tuple()
set()
None

12.7 dict字典类型

字典是无序、键不重复且元素只能是键值对的可变的容器

  • 容器

  • 元素必须是键值对

  • 键不重复,重复则会被覆盖

    data = {"k1": 1, "k1": 2}
    print(data) # {"k1": 2}
    
  • 无序(python3.6+之后字典就是有序了,之前字典是无序的)

12.7.1 定义
d1 = {}
d2 = dict()
info = {"age": 12,"sex": "male","status": True,"hobby": ["游戏", "读书"]
}

字典中对键值对的要求:

  • 键: 必须是可哈希的,目前是: int/bool/str/tuple,不可哈希的类型:list/set/dict;
  • 值:任意类型;
12.7.2 独有功能

1、获取值

info = {"name": "Alan""age": 12,"sex": "male","status": True,"hobby": ["游戏", "读书"]
}age = info.get("age")
print(age)name = info.get("name")
print(name)address = info.get("address")
print(address) # Nonebirth = info.get("birth", "2001-01-28")
print(birth) # 2001-01-28
# 案例
user_list = {"alex": "123","admin": "123456"
}username = input("请输入用户名: ")
password = input("请输入密码: ")
pwd = user_list.get(username)if pwd == None:print("用户名不存在")
else:if pwd == password:print("登录成功")else:print("密码错误")
# 写代码的准则:简单的逻辑放在前面,复杂的逻辑放在后面

2、获取所有的键

info = {"name": "Alan""age": 12,"sex": "male","status": True,"hobby": ["游戏", "读书"]
}
data = info.keys()
print(data) # 输出(["name","age","sex","status","hobby"]) 高仿列表
print(list(data))

注意:在python2中字典.keys()直接获取到的是列表,而python3中返回的是高仿列表,高仿列表可以被循环显示

for key in info.keys():print(key)
# 判断某个key是否存在字典中
if "age" in info.keys():print("age是字典的键")

3、获取所有的值

info = {"name": "Alan""age": 12,"sex": "male","status": True,"hobby": ["游戏", "读书"]
}
data = info.values()
print(data) # dict_value(["Alan",12,"male","True",["游戏",读书]])

注意:在python2中字典.values()直接获取到的是列表,而python3中返回的是高仿列表,高仿列表可以被循环显示

for value in info.values():print(value)
if 12 in info.values():print("12是字典的值")

4、获取所有的键值

info = {"name": "Alan""age": 12,"sex": "male","status": True,"hobby": ["游戏", "读书"]
}
data = info.items()print(data) # 输出dict_items() ([('age', 12),("name",Alan),....])
for item in info.items():print(item) #item是一个元组print(item[0],item[1])
# -------------------
for key,value in info.items():print(key,value) #key代表键,value代表值

5、设置值

info = {"name": "Alan""age": 12,"sex": "male","status": True,"hobby": ["游戏", "读书"]
}
# 没有这个键值是添加,有这个键的话是修改
data.setdefault("salary","15000")

6、批量更新键值对

info = {"name": "Alan""age": 12,"sex": "male","status": True,"hobby": ["游戏", "读书"]
}
info.update({"age": 18, "name": "Bob"})
print(info) # info中没有的键则直接添加,有的键则是更新值,主打一个批量更新

7、指定移除键值对

info = {"age": 12, "status": True, "name": "Alex"}
data = info.pop("age")
print(info) # {"status": True, "name": "Alex"}
print(data) # 12

8、按照顺序移除(后进先出)

info = {"age": 12, "status": True, "name": "Alex"}
data = info.popitem()
print(info) # {"age": 12, "status": True}
print(data) # {"name": "Alex"}
# 练习题
"""
结合下面的两个变量 header 和 stock_dict实现注意输出股票信息,格式如下:SH601778,股票名称:中国晶科、当前价:6.29、涨跌额:+1.92。SH688566,股票名称:吉贝尔、当前价:...               。...
"""
header = ['股票名称', '当前价', '涨跌额']
stock_dict = {'SH601778': ['中国晶科', '6.29', '+1.92'],'SH688566': ['吉贝尔', '52.66', '+6.96'],'SH688268': ['华特气体', '88.80', '+11.72'],'SH600734': ['实达集团', '2.60', '+0.24']
}for key,value in stock_dict.items():# 'SH601778', ['中国晶科', '6.29', '+1.92']textList = list()for index in range(len(header)):str = "{0}: {1}".format(header[index],value[index])textList.append(str)print("{0}, {1}".format(key, ", ".join(textList)))
12.7.3 公共功能

1、求并集(python3.9加入)

v1 = {"k1": 1, "k2": 2}
v2 = {"k2": 22, "k3": 33}v3 = v1 | v2
print(v3) # {"k1": 1, "k2": 22, "k3": 33}

2、长度

info = {"age": 12, "status": True, "name": "Alex"}
print(len(info)) # 3

3、是否包含

info = {"age": 12, "status": True, "name": "Alex"}
v1 = "age" in info
print(v1) # truev2 = "age" in info.keys()

4、索引(键)

字典区别于元组和列表,字典的索引是键,而列表和元组则是0 1 2

info = {"age": 12, "status": True, "name": "Alex"}
print(info["age"]) # 输出12
print(info["staus"]) # 输出True
print(info["xxx"]) # 报错# 建议使用 info.get("key")

5、根据键修改值和添加值和删除键值对

info = {"age": 12, "status": True, "name": "Alex"}
info["gender"] = "男"
print(info) #{"age": 12, "status": True, "name": "Alex","gender": "男"}
info = {"age": 12, "status": True, "name": "Alex"}
del info["age"] # 保证键存在,才能删除
print(info) # {"status": True, "name": "Alex"}

6、for循环

info = {"age": 12, "status": True, "name": "Alex"}
for key in info.keys():print(key)
for value in info.values():print(value)
for key,value in info.items():print(key, value)
12.7.4 转换

想要转换为字典.

v = dict( [ ("k1", "v1"), ["k2", "v2"] ] )print(v) # { "k1":"v1", "k2":"v2" }
info = { "age":12, "status":True, "name":"武沛齐" }v1 = list(info)        # ["age","status","name"]v2 = list(info.keys()) # ["age","status","name"]v3 = list(info.values()) # [12,True,"武沛齐"]v4 = list(info.items()) # [ ("age",12), ("status",True), ("name","武沛齐") ]
12.7.5 其他
12.7.5.1 存储原理

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

12.7.5.2 速度快
info = {"alex":["肝胆","铁锤"], "老男孩":["二蛋","缺货"]
}
for "alex" in info:print("在"
info = {"alex":["肝胆","铁锤"], "老男孩":["二蛋","缺货"]
}
v1 = info["alex"]
v2 = info.get("alex")
12.7.6 嵌套

我们已学了很多数据类型,在涉及多种数据类型之间的嵌套时,需注意一下几点:

  • 字典的键必须可哈希(list/set/dict不可哈希)。

    info = {(11,22):123
    }# 错误
    info = {(11,[11,22,],22):"alex"
    }
    
  • 字典的值可以是任意类型。

    info = {"k1":{12,3,5},"k2":{"xx":"x1"}
    }
    
  • 字典的键和集合的元素在遇到 布尔值 和 1、0 时,需注意重复的情况。

  • 元组的元素不可以被替换。

dic = {'name':'汪峰','age':48,'wife':[ {'name':'国际章','age':38},{'name':'李杰','age':48} ],'children':['第一个娃','第二个娃']
}
"""
1. 获取汪峰的妻子名字d1 = dic['wife'][0]['name']print(d1)
2. 获取汪峰的孩子们d2 = dic['children']print(d2)
3. 获取汪峰的第一个孩子d3 = dic['children'][0]print(d3)
4. 汪峰的媳妇姓名变更为 章子怡dic['wife'][0]['name] = "章子怡"print(dic)
5. 汪峰再娶一任妻子dic['wife'].append( {"name":"铁锤","age":19} )print(dic)6. 给汪峰添加一个爱好:吹牛逼dic['hobby'] = "吹牛逼"print(dic)
7. 删除汪峰的年龄del dic['age']或dic.pop('age')print(dic)
"""

12.8 float浮点型

v1 = 3.14
v2 = 9.99
  • 在类型转换时,浮点型转为整型,会将小数部分去掉
v1 = 3.4
print(int(v1)) # 3
  • 保留小数点后N位
v1 = 3.1415926
print(round(v1, 3)) # 3.142
  • 浮点型的坑

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

import decimalv1 = decimal.Decimal("0.1")
v2 = decimal.Decimal("0.2")
v3 = v1 + v2
print(v3) # 0.3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/612872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL从0到1全教程【1】MySQL数据库的基本概念以及MySQL8.0版本的部署

1 MySQL数据库的相关概念 1.1 数据库中的专业术语 1.1.1 数据库 (DB) 数据库是指:保存有组织的数据的容器(通常是一个文数据库 (database)件或一组文件)。 1.1.2 数据库管理系统 (DBMS) 数据库管理系统(DBMS)又称为数据库软件(产品)&#xff0c;用于管理DB中的数据 注意:…

【前端素材】bootstrap5实现美食餐饮网站RegFood

一、需求分析 美食餐饮网站是指专门提供关于美食和餐饮的信息、服务和资源的在线平台。这类网站通常提供以下功能&#xff1a; 餐厅搜索和预订&#xff1a;用户可以在网站上搜索附近的餐厅&#xff0c;并预订桌位。网站会提供餐厅的详细信息&#xff0c;包括菜单、地址、电话号…

JavaWeb- Tomcat

一、概念 老规矩&#xff0c;先看维基百科&#xff1a;Apache Tomcat (called "Tomcat" for short) is a free and open-source implementation of the Jakarta Servlet, Jakarta Expression Language, and WebSocket technologies.[2] It provides a "pure Ja…

SpringBoot+Vue药品ADR不良反应智能监测系统源码

药品不良反应&#xff08;Adverse Drug Reaction&#xff0c;ADR&#xff09;是指合格药品在正常用法用量下出现的与用药目的无关的有害反应&#xff0c;不包括超说明书用药、药品质量问题等导致的不良后果。 ADR智能监测系统开发环境 ❀技术架构&#xff1a;B/S ❀开发语言&…

常见类型的yaml文件如何编写?--kind: Job|CronJob

本次介绍两个关联度很高的类型&#xff0c;Job和CronJob。 Job基本说明 在 Kubernetes 中&#xff0c;Job 是一种用于运行一次性任务的资源对象。它用于确保在集群内部执行某个任务&#xff0c;即使任务运行失败或其中一个 Pod 发生故障时&#xff0c;也会进行重试。Job 可以…

CRM系统进行市场营销,这些功能可以派上用场。

现如今的企业想要做好营销&#xff0c;不仅仅依赖于一句玄之又玄的slogan亦或是电子邮件的狂轰乱炸。要想做好市场活动营销需要一个前提——那就是CRM管理系统发挥作用的地方。但CRM系统关于营销的功能太多了——对于不太了解的人来说很容易不知所措。那么&#xff0c;CRM系统做…

如何上传苹果ipa安装包?

目录 引言 摘要 第二步&#xff1a;打开appuploader工具 第二步&#xff1a;打开appuploader工具&#xff0c;第二步&#xff1a;打开appuploader工具 第五步&#xff1a;交付应用程序&#xff0c;在iTunes Connect中查看应用程序 总结 引言 在将应用程序上架到苹果应用…

DUET: Cross-Modal Semantic Grounding for Contrastive Zero-Shot Learning论文阅读

文章目录 摘要1.问题的提出引出当前研究的不足与问题属性不平衡问题属性共现问题 解决方案 2.数据集和模型构建数据集传统的零样本学习范式v.s. DUET学习范式DUET 模型总览属性级别对比学习正负样本解释&#xff1a; 3.结果分析VIT-based vision transformer encoder.消融研究消…

【XR806开发板试用】+ FreeRtos开发环境搭建

获取SDK SDK可以通过官网直接下载。 下载完成之后&#xff0c;通过gzip命令解压文件 gzip -d xr806_sdk.tar.gz 获取编译链工具 还是按照官网操作指南&#xff0c;下载 gcc-arm-none-eabi-8-2019-q3-update 下载之后进行解压&#xff0c;同理。 注意修改GCC路径&#xff0c…

既然所有ERP系统都很烂,那创业公司有没有机会?

既然所有ERP系统都烂,那创业公司有没机会? 得一点点把这问题捋顺了再回答—— 先说说“都很烂”这个判断是否准确谈谈国产ERP和国际ERP厂商&#xff0c;新创公司是否有优势&#xff1f;最后聊一下创业本身&#xff0c;如何创业、风险如何…… 一些人可能对传统的ERP系统感到…

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(2)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

MySQL进阶篇(三) 索引

一、插入数据 1. insert &#xff08;1&#xff09;优化方案一&#xff0c;批量插入数据 Insert into tb_test values(1,Tom),(2,Cat),(3,Jerry);&#xff08;2&#xff09;优化方案二&#xff0c;手动控制事务 start transaction; insert into tb_test values(1,Tom),(2,Cat…

JS栈和堆:数据是如何存储的

JS栈和堆&#xff1a;数据是如何存储的 背景JavaScript 是什么类型的语言JavaScript 的数据类型内存空间栈空间和堆空间再谈闭包 背景 JS有多种数据类型&#xff1a;数字型&#xff0c;字符串型&#xff0c;数组型等&#xff0c;虽然 JavaScript 并不需要直接去管理内存&#…

Apache ActiveMQ RCE CNVD-2023-69477 CVE-2023-46604

漏洞简介 Apache ActiveMQ官方发布新版本&#xff0c;修复了一个远程代码执行漏洞&#xff0c;攻击者可构造恶意请求通过Apache ActiveMQ的61616端口发送恶意数据导致远程代码执行&#xff0c;从而完全控制Apache ActiveMQ服务器。 影响版本 Apache ActiveMQ 5.18.0 before …

linux kernel:devres模块架构分析

参考文档&#xff1a; https://www.kernel.org/doc/html/latest/driver-api/driver-model/devres.html https://www.cnblogs.com/sammei/p/3498052.html devres in linux driver devres: Managed Device Resource device resource managementdevres_alloc()动态申请内存分配…

好包不等待:用 pnpm 加速你的项目依赖

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 好包不等待&#xff1a;用 pnpm 加速你的项目依赖 前言什么是pnpm背景和诞生原因&#xff1a;与传统 npm 安装方式的区别&#xff1a; 基础用法安装依赖&#xff1a;卸载依赖&#xff1a;安装全局依赖…

2024百元蓝牙耳机测评推荐,百元超强的开放式蓝牙耳机合集

现在的蓝牙耳机市场真的是太卷了&#xff0c;各种品牌、各种型号让人挑得眼花缭乱&#xff0c;但你知道吗&#xff1f;其实在百元价位里也有很多好货。今天&#xff0c;我就来给大家好好测评几款2024年的百元级蓝牙耳机&#xff0c;看看哪些是真正的性价比之王&#xff0c;开放…

基于JAVA的康复中心管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

小微企业适用什么样的CRM系统?CRM选型有哪些技巧?

小型企业主的日子着实不好过&#xff0c;从营销和销售到客户支持和保留&#xff0c;这些基本都要亲力亲为&#xff0c;才能确保将客户放在首位。如果您要是一个小企业主&#xff0c;那么相信您能懂这个感觉&#xff0c;恨不得自己长出八只手&#xff0c;才能让一切井井有条——…

Wordpress网站开发问题解决——除了主页之外的所有页面都是“找不到页面内容”(修复记录)

一条纯经验操作 引言慌火上浇油后台查看 解决之路结尾 引言 最近 阿里云老是提醒我边缘计算机控制升级 我自己建立了一个网站&#xff0c;用的就是阿里云的万网服务器 所以 我去看看 结果跟我没什么关系 本以为就这么愉快地结束了 没想到 我建立的网站就只能打开主页 其他页…