python-06-列表

01-字符串相关的操作

print('hello'.index('h'))

# 修改大小写

# capitalize 让第一个单词的首字母大写
print('hello world.good morning\nyes'.capitalize())

# upper 全大写
print('hello'.upper())  # HELLO

# lower 全小写
print('WoRLd'.lower())  # 面向对象里,我们称之为方法

# title 每个单词的首字母大写
print('good morning'.title())

# while True:
#     content = input('请输入内容,输入exit退出:')
#     print('您输入的内容是', content)
#     # if content.lower() == 'exit':
#     if content.upper() == 'EXIT':
#         break

# ljust(width,fillchar)
# width 长度   fillchar 填充字符,默认是空格
# 让字符串以指定长度显示,如果长度不够,默认在右边使用空格补齐
print('Monday'.ljust(10, '+'))
print('Tuesday'.rjust(12, '-'))
print('Wednesday'.center(20, '*'))

print('+++++apple+++'.lstrip('+'))
print('    pear     '.rstrip())
print('    banana     '.strip())

# 以某种固定格式显示的字符串,我们可以将它切割成为一个列表
x = 'zhangsan+lisi+wangwu+jack+tony+henry+chris'
names = x.split('+')
print(names)

# 将列表转换成为字符串
fruits = ['apple', 'pear', 'peach', 'banana', 'orange', 'grape']
print('-'.join(fruits))
print('*'.join('hello'))  # iterable可迭代对象
print('+'.join(('yes', 'ok')))

# print('*'.join({'name': 'zhangsan'}))

# 字符串的运算符
# 字符串和字符串之间可以使用加法运算,作用是拼接两个字符串
# 字符串和数字之间可以使用乘法运算,目的是将指定的字符串重复多次
# 字符串和数字之间做 == 运算结果是False,做 != 运算,结果是True
# 字符串之间做比较运算,会逐个比较字符串的编码值
# 不支持其他的运算符
python学习中strip()、rstrip()、lstrip()方法
本次记录的是python学习中strip()、rstrip()、lstrip()方法,具体使用记录如下:

功能:

Python中strip()方法可以去除字符串首尾指定的字符;

rstrip()方法可以去除字符串结尾指定的字符(r相当于right),并返回新字符串;

lstrip()方法可以去除字符串开头指定的字符(l相当于left),并返回新字符串;

语法:

str.strip([chars]);

str.lstrip([chars]);

str.rstrip([chars]);

参数说明:

str:需要进行操作的字符串;

chars:可选参数,需要被去除的字符串,默认为空格。

返回值:

python的strip()、rstrip()、lstrip()方法将会返回经过去除指定字符串的新字符串。

注意事项:

1、strip()该方法相当于lstrip()以及rstrip()的组合体。

实例说明:

>>> str=" hello world! "

>>> str.strip()

输出值:hello world!

python学习过程中遇到的join()字符串方法函数

本次记录的是python学习过程中遇到的join()字符串方法函数,记录如下:

方法功能:

Python得join()方法是用来以指定的字符来序列化字符串序列的,也就是以指定的字符来连接字符序列从而生成新的字符串。

使用语法:

str.join(list)

参数说明:

str:指定的连接符

list:要连接的元素序列

返回值:

python的join()方法将会返回通过连接符连接元素序列后的字符串。

注意事项:

1、python的join()方法的str连接符可以为空但是不能省略,请注意!

实例说明:

>>>str = "-" #连接字符

>>>list= ("h", "e", "l", "l", "o"," ","w", "o", "r", "l", "d") # 字符串序列

>>>print (str.join(list))

h-e-l-l-o- -w-o-r-l-d

>>>str = "" #连接字符为空

>>>seq = ("h", "e", "l", "l", "o"," ","w", "o", "r", "l", "d") # 字符串序列

>>>print (str.join(list))

hello world

02-字符编码

# ASCII --> Latin1 --> Unicode编码
# 字符  -- > 数字编码存在一个对应的关系

# 使用内置函数  chr  和  ord 能够查看数字和字符的对应关系
# ord 获取字符对应的编码;  chr 根据编码获取对应的字符
print(ord('a'))  # 字符对应的编码是 97
print(chr(65))  # A

print(ord('こ'))
print(chr(12371))

print(ord('你'))  # 20320

# GBK  utf-8   BIG5
# 使用字符串的encode方法,可以将字符串转换成为指定编码集结果
# 如果有一个编码集的结果,想把它转换成为对应的字符,使用decode

# GBK编码,一个汉字占两个字节
print('你'.encode('gbk'))  # b'\xc4\xe3'  50403  11000100 11100011

# utf8编码,一个汉字占三个字节
print('你'.encode('utf8'))  # b'\xe4\xbd\xa0'   11100100 10111101 10100000

x = b'\xe4\xbd\xa0'
print(x.decode('utf8'))

# 把  `你好` 使用 gbk 编码
y = '你好'.encode('utf8')  # utf8一个汉字转换成为三个字节
print(y)  # b' \xe4\xbd\xa0   \xe5\xa5\xbd'

# gbk一个汉字占两个字节
print(y.decode('gbk'))  # 浣犲ソ   \xe4\xbd  \xa0\xe5  \xa5\xbd
print(y.decode('utf8'))  # txt 文本乱码,修改字符集

 目录

1、常用编码简介

2、使用encode()方法编码

3、使用decode()方法解码

4、Unicode和UTF-8的关系说明

我们在《Python中的基本数据类型》中,学习过:字符串就是连续的字符序列,可以是计算机能够表示的一切字符的集合。字符串属于不可变序列,通常用单引号(' ')、双引号(" ")或者三引号(''' '''或""" """)括起来。还提到了字符串常用的转义字符。今天主要来讲解一下字符串编码转换。

1、常用编码简介
1.1、ASCII,即美国标准信息交换码,1967年制定,主要用于美国和西欧,它仅对10个数字、26个大写英文字母、26个小写英文字母,以及一些其他符号进行了编码。ASCII码最多只能表示256个符号,每个字符占一个字节(bytes)。

1.2、GB2312,国家简体中文字符集,1980年制定,兼容ASCII。每个中文字符占两个字节。

1.3、Unicode,国际标准组织统一标准字符集,1991年制定。Unicode包含了跟全球所有国家编码的映射关系。每个字符占两个字节。

1.4、UTF-8,国际通用编码,制定于1992年,对全世界所有国家用到的字符都进行了编码。UTF-8采用一个字节表示英文字符,用三个字节表示中文。在Python3.x中默认的编码就是UTF-8编码,这就有效的解决了中文乱码的问题。

1.5、GBK,为GB2312的扩展字符集,兼容GB2312,支持繁体字,1995年制定。每个中文字符占两个字节。

在Python中,有两种常用的字符串类型,分别为str和bytes。其中,str表示Unicode字符(ASCII或者其他);bytes表示二进制数据(包括编码的文本)。这两种类型的字符串不能拼接在一起使用。通常情况下,str在内存中以Unicode表示,一个字符对应若干个字节。但是如果在网络上传输,或者保存到磁盘上,就需要把str转换为字节类型,即bytes类型。

bytes类型的数据是带有b前缀的字符串(用单引号或双引号表示),例如,b'\xd2\xb0'和b'QQ'都是bytes类型的数据。

str和bytes之间可以通过encode()和decode()方法进行转换,这两个方法是互为逆过程。下面分别进行介绍。

2、使用encode()方法编码
encode()方法为str对象的方法,用于将字符串转换为二进制数据(即bytes),也称为“编码”,其语法格式如下:

 str.encode([encoding="utf-8"][,errors="strict"])

参数说明如下:

str:表示要进行转换的字符串。

encoding="utf-8":可选参数,用于指定进行转码时采用的字符编码,默认为UTF-8,如果想使用简体中文,也可以设置为gb2312。当只有这一个参数时,也可以省略前面的“encoding=”,直接写编码。

errors="strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默认值为strict。

说明

在使用encode()方法时,不会修改原字符串,如果需要修改原字符串,需要对其进行重新赋值。

例如,定义一个名称为a的字符串,内容为“星星之火可以燎原”,然后使用encode()方法将其采用GBK编码转换为二进制数,并输出原字符串和转换后的内容,代码如下:

a = '星星之火可以燎原'
b = a.encode('gbk')      # 将gbk编码转换为二进制数据,不处理异常 
print('原字符串:',a)    # 输出原字符串 
print('转换后:',b)      # 输出转换后的二进制数据
上面的代码执行后,将显示以下内容。

原字符串: 星星之火可以燎原
转换后: b'\xd0\xc7\xd0\xc7\xd6\xae\xbb\xf0\xbf\xc9\xd2\xd4\xc1\xc7\xd4\xad'
>>> 
如果采用UTF-8编码,转换后的二进制数据为:

a = '星星之火可以燎原'
b = a.encode('utf-8')    # 将utf-8编码转换为二进制数据,不处理异常 
print('原字符串:',a)    # 输出原字符串 
print('转换后:',b)      # 输出转换后的二进制数据
原字符串: 星星之火可以燎原
转换后: b'\xe6\x98\x9f\xe6\x98\x9f\xe4\xb9\x8b\xe7\x81\xab\xe5\x8f\xaf\xe4\xbb\xa5\xe7\x87\x8e\xe5\x8e\x9f'
>>> 
3、使用decode()方法解码
decode()方法为bytes对象的方法,用于将二进制数据转换为字符串,即将使用encode()方法转换的结果再转换为字符串,也称为“解码”。

其语法格式如下:

bytes.decode([encoding="utf-8"][,errors="strict"])

参数说明如下:

bytes:表示要进行转换的二进制数据,通常是encode()方法转换的结果。

encoding="utf-8":可选参数,用于指定进行解码时采用的字符编码,默认为UTF-8,如果想使用简体中文,也可以设置为gb2312。当只有这一个参数时,也可以省略前面的“encoding=”,直接写编码。

errors="strict":可选参数,用于指定错误处理方式,其可选择值可以是strict(遇到非法字符就抛出异常)、ignore(忽略非法字符)、replace(用“?”替换非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默认值为strict。

站长在线提醒您:在使用decode()方法时,不会修改原字符串,如果需要修改原字符串,需要对其进行重新赋值。

例如,将上面示例中编码后得到二进制数据(保存在变量b中)进行解码,可以使用下面的代码:

a = b'\xd0\xc7\xd0\xc7\xd6\xae\xbb\xf0\xbf\xc9\xd2\xd4\xc1\xc7\xd4\xad'
print('解码后:',a.decode("gbk"))  # 对进行制数据进行解码
上面的代码执行后,将显示以下内容:

解码后: 星星之火可以燎原
>>> 
同样的,我们选择utf-8的字符串也是可以的

a = b'\xe6\x98\x9f\xe6\x98\x9f\xe4\xb9\x8b\xe7\x81\xab\xe5\x8f\xaf\xe4\xbb\xa5\xe7\x87\x8e\xe5\x8e\x9f'
print('解码后:',a.decode("utf-8"))  # 对进行制数据进行解码
上面的代码执行后,将显示以下内容:

解码后: 星星之火可以燎原
>>> 
站长在线提醒您:在设置解码采用的字符编码时,需要与编码时采用的字符编码一致。



本文相关知识扩展阅读:

4、Unicode和UTF-8的关系说明
Unicode直接支持全球所有语言,包含了跟全球所有国家编码的映射关系。

Unicode解决了字符和二进制的对应关系,但是使用unicode的每一个字符,都占用了两个字节,太浪费空间。如unicode表示“Python”需要12个字节才能表示,比原来ASCII表示增加了1倍。

由于计算机的内存比较大,并且字符串在内容中表示时也不会特别大,所以内容可以使用unicode来处理,但是存储和网络传输时一般数据都会非常多,那就不能这样传输了。

为了解决存储和网络传输的问题,出现了Unicode Transformation Format,学术名UTF,即:对unicode中的进行格式转换,以便于在存储和网络传输时可以节省空间!

UTF-8: 使用1、2、3、4个字节表示所有字符;优先使用1个字符、无法满足则使增加一个字节,最多4个字节。英文占1个字节、欧洲语系占2个、东亚语系占3个,其它及特殊字符占4个。

UTF-16: 使用2、4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示。

UTF-32: 使用4个字节表示所有字符。

总结:UTF 是为unicode编码 设计 的一种在存储和传输时节省空间的编码方案。

03-成员运算符

# in 和 not in 运算符
# 用来判断一个内容在可迭代对象里是否存在

word = 'hello'
x = input('请输入一个字符:')

# 判断用户输入的字符在字符串里是否存在
# for c in word:
#     if x == c:
#         print('您输入的内容存在')
#         break
# else:
#     print('您输入的内容不存在')

# if word.find(x) == -1:
#     print('您输入的内容不存在')
# else:
#     print('存在')

# if x in word:
#     print('存在')
# else:
#     print('不存在')

if x not in word:
    print('不存在')
else:
    print('存在')
# in 和 not in 运算符
# 用来判断一个内容在可迭代对象里是否存在

04-格式化打印字符串

# 可以使用 % 占位符来表示格式化一个字符串
name = 'zhangsan'
age = 18
print('大家好,我的名字是', name, '我今年', age, '岁了', sep='')

# 在字符串里可以使用 %占位符
# %s ==> 表示的是字符串的占位符
# %d ==> 表示的整数的占位符
#  %nd  ==> 打印时,显示n位,如果不够,在前面使用空格补齐
# %f ==> 表示的浮点数的占位符
# %.nf ==> 保留小数点后n位
# %x ==> 将数字使用十六进制输出
# %% ==> 输出一个 %
print('大家好,我的名字是%s,我今年%d岁了,我今天挣了%f元钱' % (name, age, 3.14))

print('大家好,我是%3d号男嘉宾' % 15)
print('大家好,我是%-3d号男嘉宾' % 15)
print('大家好,我是%03d号男嘉宾' % 15)
print('我今天挣了%.2f元钱' % 3.14592653)

a = 255
print('%x' % a)  # ff
print('%X' % a)  # FF

# 我是%s
print('大家好,我是%%s,我今年%d岁了' % 19)
# 在字符串里可以使用 %占位符
# %s ==> 表示的是字符串的占位符
# %d ==> 表示的整数的占位符
#  %nd  ==> 打印时,显示n位,如果不够,在前面使用空格补齐
# %f ==> 表示的浮点数的占位符
# %.nf ==> 保留小数点后n位
# %x ==> 将数字使用十六进制输出
# %% ==> 输出一个 %

#%r ==》这个好像是代表任意类型

05-字符串format方法的使用

# {} 也可以进行占位

# {} 什么都不写,会读取后面的内容,一一对应填充
x = '大家好,我是{},我今年{}岁了'.format('张三', 18)
print(x)

# {数字} 根据数字的顺序来进行填入。数字从 0 开始
y = '大家好,我是{1},我今年{0}岁了'.format(20, 'jerry')
print(y)

# {变量名}
z = '大家好,我是{name},我今年{age}岁了,我来自{addr}'.format(age=18, name='jack', addr='襄阳')
print(z)

# 混合使用  {数字}  {变量}
a = '大家好,我是{name},我今年{1}岁了,我来自{0}'.format('泰国', 23, name='tony')
print(a)

# {}什么都不写  {数字} 不能混合使用

d = ['zhangsan', 18, '上海', 180]
# b = '大家好,我是{},我今年{}岁了,我来自{},身高{}cm'.format(d[0], d[1], d[2], d[3])
b = '大家好,我是{},我今年{}岁了,我来自{},身高{}cm'.format(*d)
print(b)

info = {'name': 'chris', 'age': 23, 'addr': '北京', 'height': 190}
c = '大家好,我是{name},我来自{addr},身高{height}cm,我今年{age}岁了'.format(**info)
print(c)

这个和%和类似,就是一直输出的格式问题

06-列表的基本使用

# 当我们有多个数据需要按照一定的顺序保存的时候,我们可以考虑列表
# name1 = '张三'
# name2 = '李四'
# name3 = '王五'
# name4 = 'jack'

# 使用 [] 来表示一个列表,列表里的每一个数据我们称之为元素
# 元素之间使用逗号进行分割
names = ['张三', '李四', '王五', 'jack', '张飞', '关羽', '马超', '王昭君', '蔡文姬']

# 和字符串一样,都可以使用下标来获取元素和对元素进行切片
# 同时,我们还可以使用下标来修改列表里的元素
print(names[3])
names[3] = '花木兰'
print(names)

# 也可以通过下标来实现切片
print(names[3:7])

# x = 'hello'
# print(x[1])
# x[0] = 'm'  # 字符串只能获取,不能修改,字符串是不可变数据类型

# 可以使用 list(可迭代对象) 将可迭代对象转换成为一个列表
# names = list(('兰陵王', '东皇太一', '王昭君', '程咬金'))
# print(names)
# 当我们有多个数据需要按照一定的顺序保存的时候,我们可以考虑列表
# 使用 [] 来表示一个列表,列表里的每一个数据我们称之为元素
# 元素之间使用逗号进行分割
# 和字符串一样,都可以使用下标来获取元素和对元素进行切片
# 同时,我们还可以使用下标来修改列表里的元素
# 可以使用 list(可迭代对象) 将可迭代对象转换成为一个列表

07-列表增加元素

# 列表是用来保存多个数据的,是有序可变的
# 操作列表,一般都包含增加数据、删除数据、修改数据以及查询数据
# 增删改查

heros = ['阿珂', '嬴政', '韩信', '露娜', '后羿', '亚瑟', '李元芳']
# 添加元素的方法  append  insert extend
heros.append('黄忠')
print(heros)  # append在列表的最后面追加一个数据

# insert(index,object)  需要两个参数
# index 表示下标,在哪个位置插入数据
# object 表示对象,具体插入哪个数据
heros.insert(3, '李白')
print(heros)

x = ['马可波罗', '米莱迪', '狄仁杰']
# extend(iterable)  需要一个可迭代对象
# A.extend(B) ==> 将可迭代对象 B 添加到 A 里
heros.extend(x)
print(heros)
print(x)
# 列表是用来保存多个数据的,是有序可变的
# 操作列表,一般都包含增加数据、删除数据、修改数据以及查询数据
# 增删改查
# 添加元素的方法  append  insert extend
# append在列表的最后面追加一个数据
# insert(index,object)  需要两个参数
# index 表示下标,在哪个位置插入数据
# object 表示对象,具体插入哪个数据
# extend(iterable)  需要一个可迭代对象(可理解为一次可以加很多,直接加一个列表)
# A.extend(B) ==> 将可迭代对象 B 添加到 A 里

08-列表删除修改和查询元素

masters = ['王昭君', '甄姬', '貂蝉', '妲己', '小乔', '大乔']

# 删除数据有三个相关的方法   pop   remove  clear
# pop 方法默认会删除列表里最后一个数据,并且返回这个数据
# pop还可以传入index参数,用来删除指定位置上的数据
x = masters.pop(3)
print(masters)  # ['王昭君', '甄姬', '貂蝉', '小乔', '大乔']

# remove用来删除指定的元素
masters.remove('小乔')
# masters.remove('妲己')  如果数据在列表中不存在,会报错
print(masters)

# 使用del 也可以删除一个数据
del masters[2]
print(masters)

# clear 用来清空一个列表
masters.clear()
print(masters)

# a = 100
# del a
# print(a)


tanks = ['亚瑟', '程咬金', '盾山', '张飞', '廉颇', '程咬金']
# 查询相关的方法
print(tanks.index('盾山'))  # 2
# print(tanks.index('庄周'))  如果元素不存在,会报错
print(tanks.count('程咬金'))  # 2
# in 运算符
print('张飞' in tanks)  # True
print('苏烈' in tanks)  # False

# 修改元素
# 使用下标可以直接修改列表里的元素
tanks[5] = '铠'
print(tanks)
# 删除数据有三个相关的方法   pop   remove  clear
# pop 方法默认会删除列表里最后一个数据,并且返回这个数据
# pop还可以传入index参数,用来删除指定位置上的数据
# remove用来删除指定的元素
masters.remove('小乔')
# masters.remove('妲己')  如果数据在列表中不存在,会报错
# clear 用来清空一个列表
masters.clear()
# 使用del 也可以删除一个数据(补充)
del masters[2]
print(masters)

09-列表的遍历

# 遍历: 将所欲的数据都访问一遍。遍历针对的是可迭代对象
# while循环遍历  / for...in 循环遍历
killers = ['李白', '兰陵王', '韩信', '赵云', '阿珂', '孙悟空']

# for...in循环的本质就是不断的调用迭代器的 next 方法查找下一个数据
for k in killers:
    print(k)

i = 0
while i < len(killers):
    print(killers[i])
    i += 1
# 遍历: 将所欲的数据都访问一遍。遍历针对的是可迭代对象
# while循环遍历  / for...in 循环遍历
# for...in循环的本质就是不断的调用迭代器的 next 方法查找下一个数据

10-交换两个变量的值

a = 13
b = 20

# 方法一:使用第三个变量实现
# c = b
# b = a
# a = c

# 方法二:使用运算符来实现.只能是数字
# a = a + b
# b = a - b
# a = a - b

# 方法三:使用异或运算符
# a = a ^ b
# b = a ^ b
# a = a ^ b

# 方法四:使用Python特有
a, b = b, a

print(a)  # 20
print(b)  # 13
# 方法四:使用Python特有
a, b = b, a

11-冒泡排序

nums = [6, 5, 3, 1, 8, 7, 2, 4]

# 冒泡排序思想:
# 让一个数字和它相邻的下一个数字进行比较运算
# 如果前一个数字大于后一个数字,交换两个数据的位置

# nums[0]  nums[1]
# nums[1]  nums[2]
# ... ...
# nums[n]  nums[n+1]
# ... ...
# nums[length - 2] nums[length - 1]

# 每一趟比较次数的优化
# 总比较趟数的优化
i = 0
while i < len(nums) - 1:
    i += 1
    n = 0

    while n < len(nums) - 1:
        if nums[n] > nums[n + 1]:
            nums[n], nums[n + 1] = nums[n + 1], nums[n]
        n += 1

    print(nums)

# 有一个列表names,保存了一组姓名names=['zhangsan','lisi','chris','jerry','henry']
# 再让用户输入一个姓名,如果这个姓名在列表里存在,提示用户姓名已存在;
# 如果这个姓名在列表里不存在,就将这个姓名添加到列表里。

冒泡排序:两个循环,第一个循环循环排的次数,第二个循环循环哪两个排

12-列表的排序和反转

nums = [6, 5, 3, 1, 8, 7, 2, 4]

# 调用列表的 sort 方法可以直接对列表进行排序
# 直接对原有的列表进行排序

# nums.sort(reverse=True)
# print(nums)

# 内置函数sorted,不会改变原有的列表数据,会生成一个新的有序数据
x = sorted(nums)
print(nums)
print(x)

names = ['zhangsan', 'lisi', 'wangwu']
names.reverse()
print(names)

print(names[::-1])
# 内置函数sorted,不会改变原有的列表数据,会生成一个新的有序数据
# 函数reverse(),反转列表元素的顺序

13-列表的复制

x = [100, 200, 300]

# x 和  y 指向了同一个内存空间,会相互影响
y = x  # 等号是内存地址的赋值

# 调用copy方法,可以复制一个列表
# 这个新列表和原有的列表内容一样,但是指向不同的内存空间
z = x.copy()

x[0] = 1

print(z)

# 除了使用列表自带的 copy 方法以外,还可以使用copy模块实现拷贝

import copy

a = copy.copy(x)  # 效果等价于 x.copy(),都是一个浅拷贝
# 深拷贝

# 切片其实就是一个浅拷贝
names1 = ['张三', '李四', '王五', '杰克']
names2 = names1[::]
names1[0] = 'jerry'
print(names2)
# x 和  y 指向了同一个内存空间,会相互影响
y = x  # 等号是内存地址的赋值

# 调用copy方法,可以复制一个列表
# 这个新列表和原有的列表内容一样,但是指向不同的内存空间
z = x.copy()
# 除了使用列表自带的 copy 方法以外,还可以使用copy模块实现拷贝

import copy
a = copy.copy(x)  # 效果等价于 x.copy(),都是一个浅拷贝
# 深拷贝
# 切片其实就是一个浅拷贝

浅拷贝可以理解为,前一个改变了。后面的浅拷贝内容会改变的,是浅拷贝

一、深拷贝是什么?

1.概念: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”,新对象跟原对象不共享内存,修改新对象不会改到原对象

为什么使用深拷贝

我们希望在改变新的数组(对象)的时候,不会改变原数组(对象)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老板来片烤面包

君子博学于文,赠之以礼,谢君~

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

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

打赏作者

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

抵扣说明:

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

余额充值