python基础

一、 基础语法

1.1、字面量

代码中,被写在代码中的固定值称之为字面量

1.2、注释

在程序中对代码进行解释说明的文字,注释不是程序,不能被执行,只能对代码起到解释说明的作用,可以增强程序的可读性

  • 单行注释:以#开头,#右边的所有都是说明性的不被执行,一般#号和注释内容中间以一个空格隔开

# 我是单行注释
print("Hello World")
  • 多行注释:以一对三个双引号引起了的内容,支持换行

"""
注释内容
"""

1.3、变量

变量:在程序运行时,能存储计算结果或者能表示值得抽象概念,简单来说就是在程序运行时记录数据用的

定义格式: 变量名称 = 变量的值

# 定义一个变量,记录数字12
number = 12

变量的特征:变量存储的值是可以改变的

round(数值,2)将数值保留两位小数

1.4、数据类型

类型描述说明
string字符串类型用引号引起了的数据都是字符串
int有符号整型数字类型,整数
float有符号浮点型数字类型,小数

验证数据类型:使用 type() 语句,有返回值

# 查看字面量的类型
print(type("学习python"))
​
# 查看变量中存储的数据类型
name = "小张"
print(type(name))
​
# 使用变量接收返回值
String_name = type(name)

注意使用type语句查看的是数据的类型,不是变量的类型,因为变量没有类型,但它存储的数据有类型

1.5、数据类型的转换

1)数据转换

语句(函数)说明
int(x)将x转换为一个整数
float(x)将x转换为一个浮点数
str(x)将对象x转换为字符串
# 将数字转换为字符串
    value = str(23)
# 将字符串转换为数字
  number = int("23")    
# 整数转换为浮点型
  num = float(11)

注意:所有的都可以转换为字符串,但要转换为数字,需要保证字符串的内容都是数字才可以

2)进制转换

  • 转为二进制:bin(指定数)

  • 转为八进制:oct(指定数)

  • 转为十六进制:hex(指定数)

# 将num转为二进制:bin(num)
print(f"10"转为二进制为:{bin(10)})
# 将指定的num转为八进制:oct(num)
print(f"10"转为八进制为:{oct(10)})
# 将指定的num转为十六进制:hex(num)
print(f"34"转为十六进制为:{hex(34)})

3)ASCII码转换

  • 将指定数字转为对应字母:chr(数字)

# 将数字97转为对应字母
x = 97
print(f'{x}对应的字母为:{chr(x)}')

1.6、标识符

标识符就是在编程中所使用的的一系列名字,用于给变量、类、方法等命名

标识符命名要求:只允许出现 英文 、中文(不推荐)、数字(不可以用在开头)、下换线

变量命名规范:见名只意,英文字母全小写,下划线命名法

1.7、运算符

1)算数运算符

运算符描述实例
+两个对象相加a+b
-得到负数或正数a-b
*两个数相乘
/两个数相除
//取整除返回商的整数部分 9//4输出结果2
%取余返回除法的余数
**指数a**b表示a的b次方

2)赋值运算符

运算符描述实例
=赋值运算符把等号右边的值赋值给左边

3)复合赋值运算符

运算符描述实例
+=加法赋值运算符a+=b等价于a=a+b
-=减法赋值运算符a-=b等价于a=a-b
*=乘法赋值运算符a*=b等价于a=a*b
/=除法赋值运算符a/=b等价于a=a/b
%=取模赋值运算符a%=b等价于a=a%b
**=幂赋值运算符a*=b等价于a=a**b
//=取整赋值运算符a//=b等价于a=a//b

1.8、字符串

len()是python内置函数,用来统计字符串的长度

1)字符串在Python中的定义形式

# 单引号定义法:
name = '名字'
​
# 双引号定义法
name = "名字"
​
# 三引号定义法
name = """名字"""

注意:三引号定义法和多行注释写法一样,支持换行,使用变量接收就是字符串,不使用变量接收就是注释

2)引号的嵌套

如果字符串本身包含单引号,双引号

  • 单引号定义法,可以内含双引号

  • 双引号定义法,可以内含单引号

  • 可以使用转义字符(\)来解除引号作用,变成普通字符

3)字符串的拼接

可以使用 + 号将字面量和变量或者变量和变量之间拼接成新的字符串

name = "虾米"
print("你好" + name + ",欢迎学习python")

注意:+号只适用于字符串的拼接,字符串和其他类型不可以

4)字符串格式化

name = "虾米"
message = "你好啊 %s" % name
print(message)
###
  % 表示:占位
    s 表示:将变量变成字符串放入占位的地方
###

使用占位的方法可以完成字符串和数字之间的拼接

# 多个占位,变量要用括号括起来
class_num = 2
money = 111111
print("大数据时期,班级:%s班,毕业工资:%d" % (class_num,money))

常见的占位符:

格式符号转化
%s将内容转化为字符串,放入占位位置
%d将内容转换成整数,放入占位位置
%f将内容转换成浮点型,放入占位位置

5)精度控制

我们可以使用辅助符号“m.n”来控制数据的宽度和精度

  • m->控制宽度,要求是数字,设置的宽度小于数字自身不生效

  • n->控制小数点精度,要求是数字,会进行小数点的四舍五入

示例:

  • %5d:表示将整数的宽度控制在5位,如数字11,设置为5d,就会变成:空格 空格 空格11,用三个空格补足宽度

  • %5.2f:表示将宽度控制在5位,小数点精度设置为2位,其中小数点和小数部分也计入宽度,如数字11.345设置为5.2f,就会变成:空格 空格11.35

6)快速格式化

语法:f"内容"{变量}

特点:不限数据类型,也不做精度控制

name = "虾米"
year = 2001
money = 111.23
print(f"我是:{name},出生于:{year}年,期望工资为:{money}")

7)字符串大小比较

  • 在程序中每一个字符都有其对应的ASCII码值,字符串的比较就是基于数字的码值进行比较的

  • 字符串的比较是按位比较的,也就是一位一位的比较,只要有一位大,那么整体就大

8)format格式化输出

  • 格式:'{:.2f}'.format(值)

    # 保留两位小数
    s = 23.453
    print("今天的价格为{:.2f}元/斤".format(s))

  • 输出百分数:'{:.2%}'.format(0-.2344)

    print("今天占比为:{}".format(0.2345))        # 输出:今天占比为:0.2345
    print("今天占比为:{:.2%}".format(0.2345))      # 输出:今天占比为:23.45%

  • 下标控制:

    print("今天占比为:{0}".format(0.2345,234))       # 输出:今天占比为:0.2345
    print("今天占比为:{1}".format(0.2345,234))       # 输出:今天占比为:234
    print("今天占比为:{1:.0%}".format(0.2545,0.23))      # 输出:今天占比为:23%

案例:格式化输出

# 格式化输出
lst = [['01','风扇',400],['30','洗衣机',500]]
print("编号\t\t名称\t\t\t价格")
# 外层循环
for item in lst:
    item[0] = '00'+item[0]
    item[2] = '¥{:.2f}'.format(item[2])
    # 内层循环
    for i in item:
        print(i,end='\t\t')
    print()

1.9、数据输入

数据输入格式:变量名 = input()

可以使用一个变量接收 input() 语句录入的信息,默认接收的是字符串类型,其中input语句后面可以填写提示内容

name = input("请告诉我你的名字:")

二、 逻辑判断

2.1、布尔类型

布尔类型常用于表示真和假

布尔说明
TrueTrue表示真
FalseFalse表示假

注意:True 本质上是一个数字1,False 是数字0

定义变量存储布尔类型数据:变量名 = 布尔类型字面量

2.2、比较运算符

比较运算符常用于计算真和假

运算符描述
==判断内容是否相等,相等为True,不等为False
!=判断内容是否不相等,满足为True,不满足为False
>判断左边内容是否大于右边,满足为True,不满足为False
<判断左边内容是否小于右边,满足为True,不满足为False
>=判断左边内容是否大于等于右边,满足为True,不满足为False
<=判断左边内容是否小于等于右边,满足为True,不满足为False

注意:== 也可用于字符串的比较

name_1 = "itnac"
name_2 = "itnam"
print(f"itnac == itnam 结果是{name_1 == name_2}")

2.3、判断语句

1)if 判断语句(判断条件后面的冒号不能省略,要有缩进)

"""
  格式:
    if 要判断的条件:
      条件成立时要执行的代码
"""
# 定义变量
age = 30
​
#进行判断
if age >= 18:
    print("以经成年了!")
print("没有缩进,则该语句和if语句同级")

注意:input 语句录入的类型为字符串,如果需要进行数字的判断需要进行转换

age = input("请输入你的年龄:")
age= int(age) #进行转换类型
if age >= 18:
    print("你已经成年,欢迎进入!")

2)if else 语句 (判断条件后面的冒号不能省略,要有缩进)

"""
  格式:
    if 要判断的条件:
      条件成立时要执行的代码
    else:
      不成立时执行的代码
"""
# 定义变量
age = 30
​
#进行判断
if age >= 18:
    print("以经成年了!")
else:
    print("没有成年!")

注意:else 后面不需要写判断条件,和if 一样同样需要缩进

3)if elif else 语句(多条件判断)

可以完成多条件判断,有多个 elif 语句,并且判断是互斥且有顺序的,也可以不写else

height = int(input("请输入你的身高:"))
value = int(input("请输入你的级别:"))
# 判断
if height >= 120:
    print("身高合格")
elif value > 2:
    print("等级合格")
else:
    print("都不合格")

4)判断语句嵌套

嵌套的关键点在于:空格缩进,通过空格缩进来决定语句之间的层次关系

if int(input("你的身高多少:")) > 120:
    print("身高超过限制,不可以免费进入")
    print("但是,如果VIP等级超过3级,就可以免费")
  # 嵌套的逻辑判断
    if int(input("你的VIP等级为:")) > 3:
        print("等级合格,免费进入")
    else:
        print("需要支付20元")
else:
    print("欢迎进入")

2.4、其它运算符

  • 逻辑运算符:and or not

  • 成员运算符:in not in

  • 身份运算符:is is not

  • 位运算符: ~ & ^ << >>

a = 10
b = 20
list = [1, 2, 3, 4, 5 ] 
 
# in 判断前面的值是否在后面的容器中
if ( a in list ):
 print ("变量 a 在给定的列表中 list 中")
else:
 print ("变量 a 不在给定的列表中 list 中")
 
# and 两边条件都满足才为True
if a and b :
 print ("变量 a 和 b 都为 true")
else:
 print ("变量 a 和 b 有一个不为 true")
​
# 对结果取反
if not( a and b ):
 print (" 变量 a 和 b 都为 false,或其中一个变量为 false")
else:
 print (" 变量 a 和 b 都为 true")
​
# is 判断内存地址是否一致
if ( a is b ):
 print (" a 和 b 有相同的标识")
else:
 print (" a 和 b 没有相同的标识")
 
if ( a is not b ):
print ("4 - a 和 b 没有相同的标识")
else:
print ("4 - a 和 b 有相同的标识")

三、 循环语句

3.1、while 循环

"""
  格式:
    while 条件 :
      满足条件时执行的语句
"""
​
i = 0
while i < 10:
    print("条件内一直循环")
    i += 1
print("循环结束")

注意:1.while 的条件需要得到布尔类型,True表示继续循环,False 表示结束循环

2.需要设置循环的终止条件,否则将无限循环

3.空格缩进和if判断一样,都需要设置,冒号不能少

# 使用while循环计算1到100的和
i = 1
sum = 0
while i <= 100:
    sum += i
    i += 1
print(f"1到100的和为:{sum}")

3.2、while 嵌套循环

主要注意缩进格式

# 外层循环控制天数,内层循环控制次数
i = 1
while i <= 10:
    print(f"今天是第{i}天")
    j = 1
    while j <= 10:
        print(f"第{j}次尝试")
        j += 1
    i += 1
print("10天每天10次尝试结束")

3.3、输出不换行

在输出语句print 语句中,加上end="" 即可输出不换行

print("hello",end="")
print("word",end="")

3.4、for 循环

while循环的循环条件时自定义的,自行控制循环条件,for循环是对内容逐个处理

注意:for循环正常结束还有对应的else语句,如果中途结束不走else语句

1)基础语法

# 格式:
#     for 临时变量 in 待处理数据集:
#     循环满足条件时执行的代码
​
name = "iurjfoi"
# for循环 处理字符串
for x in name:
    # 将被处理的数据中的内容挨个打印出来
    print(x)

注意:同while循环不同,for循环无法定义循环条件,只能从被处理的数据中依次取出内容进行处理

# 统计个数
name = "iirjfhiahifajiahahia"
count = 0
for x in name:
    if x=='a':
        count += 1
print(f"变量name中有{count}个a")

2)range语句(获取数字序列)

  • range(num) -> 获取一个从0开始到num结束的数字序列(不包含num)

    如:range(5)获取的数字为[0,1,2,3,4]

  • range(num1,num2) -> 获取从num1开始num2结束的数字序列(不含num2)

    如:range(5,10)获取的数字为[5,6,7,8,9]

  • range(num1,num2,step) -> 获取从num1开始到num2结束的数字序列(不含num2)数字之间的步长以step为准(step默认为1)

    如:range(5,10,2)获取的数字为[5,7,9]

# range 语法1:range(num)
for x in range(5):
    print(x)        # 结果为:[0,1,2,3,4]
​
# range 语法2:range(num1,num2)
for x in range(5,10):
    print(x)        # 结果为:[5,6,7,8,9]
    
# range 语法3:range(num1,num2,step)
for x in range(0,10,2):
    print(x)        # 结果为:[0,2,4,6,8]

3)九九乘法表

外层循环控制行数,内层循环控制列数

# while循环输出九九乘法表
i = 1
while i <= 9:
    j = 1
    while j <= i:
        # 使用print语句不换行,通过\t制表符进行对齐
        print(f"{j}*{i}={i*j}\t" ,end="")
        j += 1
    # 换行
    print()
    i += 1
# for循环输出九九乘法表
for i in range(1,10):
    for j in range(1,10):
        if j <= i:    # 内层循环小于等于外层循环时换行(进行下一行)
            print(f"{j} * {i} = {i*j}\t",end="")
        j += 1
    print()
    i += 1
# 简化
for i in range(1,10):
    for j in range(1,i+1):
        print(f"{j} * {i} = {i * j}\t", end="")
        j += 1
    print()
    i += 1

3.5、break和continue

continue关键字用于:中断本次循环,直接进入下一次循环

# 循环五次输出五次语句1,语句2不会执行
for i in range(1,6):
    print("语句1")
    continue
    print("语句2")

break关键字用于:直接退出循环

# 循环一次,执行一次语句1,结束循环
for i in range(1,100):
    print("语句1")
    break
    print("语句2")

注意:在嵌套循环中,只能作用在所在循环上,不能对上层循环起作用

3.6、两循环的区别

  • 在循环控制上:

    • while循环可以自定义循环条件,自行控制

    • for循环不可以自定义循环条件,只可以从容器中一个个取出元素

  • 在无限循环上:

    • while可以通过循环条件做到无限循环

    • for循环不可以

  • 在使用场景上

    • while循环可以用在任意想要循环的地方

    • for循环适用于简单固定次数的循环和遍历数据容器上

3.7、enumerate循环

# 与for遍历相同,不同的就是可以操作下标和元素----enumerate(容器名)
mylist  = [1,2,3,4,5]
# 遍历
for index,value in enumerate(mylist):
    print(f'下标为{index}的元素为{value}')

四、 函数的应用

函数:是组织好,可重复使用的,用来实现特定功能的代码段

好处:可重复使用,提高代码的复用性,减少重复代码,提高开发效率

4.1、函数的定义

"""
    def 函数名(传入参数):
        函数体
        return 返回值
"""

注意:参数不需要可以省略,返回值也可以省略,函数必须先定义后使用

# 定义函数
def my_len():
    #编写函数体
    print("函数体相关代码")
    
# 调用函数
my_len()

4.2、函数的参数

1)调用函数时,接收调用者提供的数据

# x和y可以在调用时指定
def add(x,y):
    result = x + y
    print(f"{x} + {y}的结果是:{result}")
    
# 调用函数
add(2,3)
add(6,7)
  • 函数定义中:提供的x和y,称之为:形式参数(形参)表示函数声明需要两个参数,参数之间使用逗号隔开

  • 函数调用中:提供的具体数值,称之为:实际参数(实参)表示函数使用时使用的具体值,传入时要按照顺序传入,逗号隔开

2)函数的多种传参方式

  • 位置参数:调用函数时根据函数定义的参数位置来传递参数,且形参和实参的个数和位置要一致

    # 定义函数
    def user_into(name,age,gender):
        print(f"你的名字{name},你的年龄{age},性别{gender}")
        
    # 调用函数(位置传参)
    user_into("Tom","20","男")

  • 关键字参数:函数调用时,通过“键=值”的形式传递参数,这样可以消除参数的顺序需求

    # 定义函数
    def user_into(name,age,gender):
        print(f"你的名字{name},你的年龄{age},性别{gender}")
        
    # 调用函数(关键字传参)
    user_into(name="Tom",age=20,gender="男")
    ​
    # 顺序可以不一样
    user_into(age=20,name="Tom",gender="男")
    ​
    # 可以混用,但位置参数必须在前,有顺序要求
    user_into("Tom",age=20,gender="男")

  • 缺省参数:在定义函数时就为参数提供默认的值,调用函数时可以不传值,默认使用定义时提供的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

    # 定义函数(提供默认参数)
    def user_into(name,age,gender='男'):
        print(f"你的名字{name},你的年龄{age},性别{gender}")
        
    # 调用函数(使用默认参数)
    user_into('Tom',30)

  • 可变参数:

    1)位置传参的可变性:

    # 定义可变参数(注意:参数中的*号不能少)
    def uesr_into(*args):
        print(args)
        
    # 传入一个值
    user_into('Tom')    # 结果为:('Tom',)
    ​
    # 传入多个
    user_into('Tom',12)   # 结果为:('Tom',12)

    注意:传进的所有参数都会被定义的参数收集,它会将传进来的参数合并为一个元组,定义的*参数是元组类型

    2)关键字传参的可变性

    # 定义可变参数(注意:参数中的两个*号不能少)
      def user_into(**kwargs):
          print(args)
       
      # 传入的参数是键值对
      user_into(name='Tom',age=18)  # 结果为:{'name':'Tom','age':18}
    ​
    注意:传进的键值对都会被定义的参数接收,将传进来的参数合并为一个字典,定义的参数是字典类型

注意:一般没有特殊要求时,可变参数的参数名默认为*args和**kwargs(规范要求,不强求)

3)函数作为参数传递

# 定义函数,参数为另一个函数
def fun(computer):
    # 内部需要调用这个函数
    result = computer(1,2)
    print(result)
    
# 定义computer函数
def computer(x,y):
    return x+y
​
# 调用fun函数(传入另一个函数名)
fun(computer)  
 

4.3、函数的返回值

1)通过return关键字,向调用者返回相应数据

# 定义具有参数和返回值的函数
def add(a,b):
    result = a + b
    return result
​
# 调用函数,定义变量接收返回的结果
r = add(3,4)
# 打印返回的值
print(r)

注意:当函数体执行到return关键字时,函数就会结束执行,return后面的代码将不会执行

2)None类型

函数没有使用return语句返回数据,实际上就是返回了None这个字面量,None,类型是:<class"NoneType>

None表示:空的,无实际意义的意思

# 定义函数
def say_hello():
    print("Hello···")
    
# 使用变量接收没有返回值的函数
result = say_hello()    
​
# 打印返回值
print(result)           # 结果为:None
​
#打印返回值类型
print(type(result))     # 结果为:<class 'NoneType'>

使用场景:

  • 用在if判断上,None等同于False

    # 定义函数
    def check_age(age):
        if age > 18:
            return "SUCCESS"
        return None
    ​
    #调用函数,通过if判断返回值进行不同逻辑的执行
    result = check_age(14)
    # 使用not关键字将真的变成假的,假的变成真的
    if not result:
        print("未成年")

  • 用于声明无内容的变量上

    # 定义变量,赋值为None(没有具体值)
    name =None

3)函数的多返回值

  • 返回时:一个函数有多个返回值,一个return后面跟多个结果,之间用逗号隔开

  • 接收时:按返回的顺序定义多个变量接收,变量之间用逗号隔开

  • 返回值:不受限制,任意类型,多个返回值可以为不同类型

# 格式
def 函数名(参数):
  return 返回值1,返回值2
​
# 调用多返回值函数
x,y = 函数名(参数)
print(x)      # 结果为:返回值1
print(y)      # 结果为:返回值2

4.4、函数说明文档

通过多行注释的方式,对函数进行解释,内容应该写在函数体之前,调用具有函数说明文档的函数时,鼠标悬停机会出现说明的文字提示

# 语法格式
def fun(x,y):
    """
    函数说明
    :param x: 形参x的说明
    :param y: 形参y的说明
    :return: 对返回值的说明
    """
    函数体
    return 返回值

注意::param表示解释说明的标志

4.5、函数的嵌套调用

函数的嵌套调用指:一个函数里面又调用了另一个函数

def fun_a():
    print("---a---")
    
def fun_b():
    print("---b---")
    # fun_b函数中嵌套调用了fun_a函数
    fun_a()
    
# 调用fun_b
fun_b()

4.6、变量的作用域

变量的作用域指的是:变量的作用范围

主要分为两类:局部变量全局变量

1)局部变量

局部变量:就是定义在函数体内部的变量,只在函数体内部有效

def text():
    # 定义局部变量num
    num = 12
    print(num)
​
# 函数调用
text()
print(num)  # 报错

2)全局变量

全局变量:指在函数体内外都可以生效的变量

# 定义全局变量
num = 10
​
def text_1():
    print(num)  # 访问全局变量并打印
    
def text_2():
    print(num)  # 访问全局变量并打印
​
# 调用函数
text_1()  # 结果为:10
text_2()  # 结果为:10

4.7、global 关键字

使用global关键字,可以在函数内部声明变量为全局变量,通过这样就可以在函数内部将全局变量的值进行修改

# 定义全局变量
num = 100
​
def text():
    # 使用global关键字
    global num
    num = 200
​
# 打印全局变量的值
print(num)      # 结果为:200

4.8、函数综合案例

# 定义全局变量
money = 500000
# 要求输入名字
name = input("请输入姓名:")
# 定义查询函数
def query():
    print("----------查询余额-----------")
    print(f"{name} 你好!你的余额为:{money}元")
​
# 定义存款函数
def saying(number):
    print("----------存款------------")
    # global   表示修饰局部变量为全局变量
    global money
    money += number
    print(f"{name} 你好!你成功存入 {number} 元\r\n账户余额为:{money}元")
​
# 定义取款函数
def get_money(number):
    print("----------取款-----------")
    global  money
    money -= number
    print(f"{name} 你以成功取出{number}元,账户余额为:{money}元")
​
# 定义主菜单
def main():
    print("------------主菜单---------------")
    print("欢迎进入** 银行!!请选择你需要的操作:")
    print("查询余额\t【1】\r\n取款\t\t【2】\r\n取款\t\t【3】\r\n退出\t\t【4】")
    return input("请输入:")
​
# 循环进行
while (True):
    route = main()
    if route == "1":
        query()
        continue
    elif route == "2":
        saying(int(input("输入存款金额:")))
        continue
    elif route == "3":
        get_money(int(input("输入取款金额:")))
        continue
    else:
        print("退出成功!!")
        break

4.9、函数和方法

函数是一个封装的代码单元,可以提供特定功能,如果将函数定义为class(类)的成员,那么函数就称之为:方法

# 定义函数
def 函数名(参数):
  函数体
  return 返回值
​
# 定义方法
class 类名:
  def 方法名(参数):
      方法体
      return 返回值

注意:方法和函数功能一样,只是调用格式不一样

  • 函数调用:

    # 变量名 = 函数名(参数)
    num = add(1,2)
  • 方法调用:

    """
      类变量名 = 类名()
      变量名 = 类变量名.方法名(参数)
    """
    student = student()
    num = student.add(1,2)

4.10、lambda函数

函数定义中:

  • def关键字,可以定义带有名称的函数

  • lambda关键字可以定义匿名函数(无名称)

有名称的函数可以基于名称重复使用,无名称的函数,只可临时使用一次

匿名函数定义语法:lambda 传入参数:函数体(一行代码)

  • lambda 是关键字,表示定义匿名函数

  • 传入参数表示匿名函数的形式参数,如:x,y表示接收2个形式参数

  • 函数体,就是函数的执行逻辑,注意:只能写一行,无法写多行

# 使用def关键字定义函数
def fun(computer):
    result = computer(1,2)
    print(result)
   
def computer(x,y):
    return x+y
​
fun(computer)  
​
# 使用lambda关键字,传入一个一次性使用的函数
def fun(computer):
​
    result = computer(1,2)
    print(result)
    
fun(lambda x,y: x+y)    

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值