Python基础语法_字符串扩展
学习目标:
1、字符串的三种定义方式
2、字符串拼接:掌握如何拼接字符串
3、字符串格式化:掌握通过占位的形式拼接字符串
4、格式化的精度控制:掌握格式化字符串过程中做数字的精度控制
5、字符串格式化方式2:掌握快速字符串格式化的方式
6、对表达式进行格式化:了解什么是表达式;掌握对表达式进行字符串格式化
一、字符串的三种定义方式
1.1、三种定义方式
字符串在Python中有多种定义方式:
- 单引号定义法:
name = '陶其的个人博客'
- 双引号定义法:
name = "陶其的个人博客"
- 三引号定义法:
name = """陶其的个人博客"""
三引号定义法,和多行注释的写法一样,同样支持换行操作。
使用变量接收它,他就是字符串;不使用变量接收它,就可以作为多行注释使用。
1.2、字符串的引号嵌套
如果我想要定义的字符串本身,是包含:单引号、双引号自身呢?如何写?
- 单引号定义法,可以内含双引号:
msg = '打印的内容是"Hello World"'
- 双引号定义法,可以内含单引号:
msg = "打印的内容是'Hello World'"
- 可以使用转义字符串
\
来将引号解除效用,变成普通字符串:msg = "打印的内容是\"Hello World\""
。
# 单引号法
msg = '打印的内容是"Hello World"'
print(msg)
# 双引号法
msg = "打印的内容是'Hello World'"
print(msg)
# 转移字符
msg = "打印的内容是\"Hello World\""
print(msg)
二、字符串拼接
如果我们有两个字符串(文本)字面量,可以将其拼接成一个字符串,通过 +
号即可完成,如:
print("陶其的" + "个人博客")
不过一般单纯的2个字符串字面量进行拼接显得很呆,一般字面量和变量或变量和变量之间会使用拼接,如:
name = "陶其"
subtitle = "当下,即是未来"
print(name + "的个人博客,网站副标题:" + subtitle)
注意:数字类型或其他类型和字符串类型没办法通过 +
进行直接拼接,会报错。
如:下面就是错误的例子
tel = 18212345678
print("我的电话:" + tel)
三、字符串格式化
通过上面的例子,我们会发现,这个拼接字符串也不好用啊。
- 变量过多,拼接起来是在是太麻烦了;
- 字符串无法和数字或其他类型完成拼接。
通过字符串格式化,可以解决这两个问题。
我们可以通过如下语法,完成字符串和变量的快速拼接。
name = "陶其"
msg = "%s的个人博客" % name
print(msg)
其中的,%s
:
%
表示:我要占位s
表示:将变量变成字符串放入占位的地方
所以综合起来的意思就是:我先占个位置,等一会儿有个变量过来,我把它编程字符串放到占位的位置。
那么多个变量呢?
name = "陶其"
subtitle = "当下,即是未来"
msg = "%s的个人博客,网站副标题:%s" % (name, subtitle)
print(msg)
注意:使用多个占位符时,变量使用括号括起来,中间使用,
间隔。前面多个 %s
展示的内容是按照后面括号里的顺序依次填入的。
那么数字类型呢?当然可以
tel = 18212345678
print("我的电话:%s" % tel)
在Python中,其实支持非常多的数据类型占位。
最常用的是如下三类:
name = "纯净水"
year = 2024
price = 1.5
message = "这件商品是%s,生产于%d年,单价是:%f元" % (name, year, price)
print(message)
四、格式化的精度控制
上面的示例中单价本应该显示:1.5元,结果打印的是:1.500000元。
这就是没有对数字类型格式化时没有做精度控制。
我们可以使用辅助符号 m.n
来控制数据的宽度和精度。
m
:控制宽度,要求是数字(很少使用),设置的宽度小于数字自身,不生效;n
:控制小数点精度,要求是数字,会进行小数的四舍五入。
示例:
%5d
:标识将证书的宽度控制在5位,如数字11,被设置为5d,就会变成:[空格][空格][空格]11
,用是哪个空格补足宽度%5.2f
:标识将宽度控制为5,将小数点精度设置为2- 小数点和小数部分也算入宽度计算。如,对11.345设置了
%7.2f
后,结果是:[空格][空格]11.35。2个空格补足宽度,小数部分限制2位精度后,四舍五入为.35
- 小数点和小数部分也算入宽度计算。如,对11.345设置了
%.2f
:表示不限制宽度,只设置小数点精度为2,如11.345设置%.2f
后,结果是11.35
那么上一节的例子可以这么写:
name = "纯净水"
year = 2024
price = 1.5
message = "这件商品是%s,生产于%d年,单价是:%.2f元" % (name, year, price)
print(message)
这样单价显示到角分的格式就是日常使用的。
五、字符串格式化方式2
字符串格式化 – 快速写法
目前通过 %
符号占位已经很方便了,还能进行精度控制。
是否有更优雅的方式解决问题呢?
当然有。
通过语法:f"内容{变量}"
的格式来快速格式化。
这里的f
,是format(格式)的缩写,不是float的缩写。
name = "纯净水"
year = 2024
price = 1.5
message = f"这件商品是{name},生产于{year}年,单价是:{price}元"
print(message)
快速格式化特点:
- 不限数据类型
- 不做精度控制
六、对表达式进行格式化
刚刚的演示,都是基于变量的。
可是能否更加优雅些,少些点代码,直接对“表达式”进行格式化呢?
6.1、什么是表达式
表达式:一条具有明确执行结果的代码语句。
如:1+1
、5*2
、type("字符串")
,就是表达式,因为有具体的结果,结果是一个数字。
又或者,常见的变量定义:
name = "张三"
age = 11+11
等号右侧的都是表达式,因为它们有具体的结果,结果赋值给了等号左侧的变量。
那么,对于字符串格式化,能否直接格式化一个表达式呢?
6.2、格式化表达式
写法:
f"{表达式}"
"%s、%d、%f" % (表达式, 表达式, 表达式)
print("1 * 1的结果是:%d" % (1 * 1))
print(f"1 * 1的结果是:{1 * 1}")
print("字符串在Python中的类型是:%s" % type('字符串'))
在无需使用变量进行数据存储的时候,可以直接格式化表达式,进而简化代码。
七、练习
7.1、练习:股价计算小程序
"""
练习:股价计算小程序
"""
# 公司名
name = "传智播客"
# 当前股价
stock_price = 19.99
# 股票代码
stock_code = "003032"
# 股票每日增长系数,浮点数类型
stock_price_daily_growth_factor = 1.2
# 增长天数
growth_days = 7
print(f"公司:{name},股票代码:{stock_code},当前股价:{stock_price}")
print("每日增长系数是:%.1f,经过%d天的增长后,股价达到了:%.2f" % (stock_price_daily_growth_factor, growth_days, stock_price * stock_price_daily_growth_factor ** growth_days))
这里也可以先将最终股价的表达式赋值给一个变量,然后打印这个变量即可。