8天Python从入门到精通 第二章 Python基础语法 2.8 字符串扩展

8天Python从入门到精通

【黑马程序员python教程,8天python从入门到精通,学python看这套就够了】

第二章 Python基础语法

2.8 字符串扩展
2.8.1 字符串的三种定义方式

字符串在Python中有多种定义形式:

  1. 单引号定义法:

    在这里插入图片描述

  2. 双引号定义法:

    在这里插入图片描述

  3. 三引号定义法:

    在这里插入图片描述

三引号定义法,和多行注释的写法一样,同样支持换行操作。

使用变量接收它,它就是字符串

不使用变量接收它,就可以作为多行注释使用。

2.8.2 字符串的引号嵌套

思考:如果我想要定义的字符串本身,是包含:单引号、双引号自身呢?如何写?

在这里插入图片描述

  • 单引号定义法,可以内含双引号
  • 双引号定义法,可以内含单引号
  • 可以使用转移字符(\)来将引号解除效用,变成普通字符串
2.8.3 小结
  1. 字符串的三种定义方式:
  • 单引号方式

  • 双引号方式

  • 三引号方式

  1. 引号的嵌套
  • 可以使用:\进行转义

  • 单引号内可以写双引号或双引号内可以写单引号

2.8.4 字符串拼接

如果我们有两个字符串(文本)字面量,可以将其拼接成一个字符串,通过+号即可完成,如:

print("学IT来黑马" + "月薪过万")

输出结果:

在这里插入图片描述

不过一般,单纯的2个字符串字面量进行拼接显得很呆,一般,字面量和变量或变量和变量之间会使用拼接,如:

name = "黑马程序员"
print("我的名字是: " + name + ", 我可以教大家IT技能")

运行结果

在这里插入图片描述

既然,字符串和变量进行拼接,我们来完成一个小需求:

定义2个变量:

  • name,内容是“黑马程序员”
  • address,内容是“建材城东路9号”

要求写程序通过print语句以及字符串拼接的方式输出:

“我是:黑马程序员,我的地址是:建材城东路9号院“

name = "黑马程序员"
address = "建材城东路9号"
print("我是: " + name + ", 我的地址是: " + address)

运行结果

在这里插入图片描述

既然可以和字符串变量完成拼接,那么,是否可以和其它变量类型如数字类型完成拼接呢?

name = "传智播客"
set_up_year = 2006
print("我是: " + name + ", 我成立于: " + set_up_year)

运行结果:

在这里插入图片描述

让我们试一试。

字符串无法和非字符串变量进行拼接

因为类型不一致,无法接上

就像接力赛一样,不是队友,不能接力的哦

2.8.5 小结
  1. 如何完成字符串拼接?

使用“+”号连接字符串变量或字符串字面量即可

  1. 有哪些注意事项?

无法和非字符串类型进行拼接

2.8.6 字符串格式化

我们会发现,这个拼接字符串也不好用啊

  1. 变量过多,拼接起来实在是太麻烦了

  2. 字符串无法和数字或其它类型完成拼接。

在这里插入图片描述

所以,有没有其它方式,即方便又支持拼接其它类型呢?

这个方式,就是字符串的格式化

我们可以通过如下语法,完成字符串和变量的快速拼接。

name = "黑马程序员"
message = "学IT就来 %s" % name
print(message)

运行结果

在这里插入图片描述

其中的,%s

  • % 表示:我要占位
  • s 表示:将变量变成字符串放入占位的地方

所以,综合起来的意思就是:我先占个位置,等一会有个变量过来,我把它变成字符串放到占位的位置

那,数字类型呢?可以不可以占位?

那必须可以,我们来尝试如下代码:

class_num = 57
avg_salary = 16781
message = "Python大数据学科, 北京%s期, 毕业平均工资: %s" % (class_num, avg_salary)
print(message)

运行结果

在这里插入图片描述

【注意】

多个变量占位,变量要用括号括起来,并按照占位的顺序填入

数字也能用%s占位吗?

→ 可以的哦,这里是将数字 转换成了 字符串哦,也就是数字57,变成了字符串"57"被放入占位的地方

在这里插入图片描述

数字类型,也太没有地位了吧,竟然要被转成字符串拼接。

有没有体面一点的方式,让数字以其原本的面貌拼接进去呢?

安排。

Python中,其实支持非常多的数据类型占位

最常用的是如下三类

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

在这里插入图片描述

如下代码,完成字符串、整数、浮点数,三种不同类型变量的占位

name = "传智播客"
set_up_year = 2006
stock_price = 19.99
message = "我是: %s, 我成立于: %d, 我今天的股价是: %f" % (name, set_up_year, stock_price)
print(message)

运行结果

在这里插入图片描述

2.8.7 小结
  1. 字符串格式化的语法?

“%占位符” % 变量

  1. 常用占位符有哪3个?
  • 字符串:%s
  • 整数: %d
  • 浮点数: %f
2.8.8 格式化的精度控制

如下代码,完成字符串、整数、浮点数,三种不同类型变量的占位

在这里插入图片描述

在这里插入图片描述

细心的同学可能会发现:浮点数19.99,变成了19.990000输出

这里我们就要讲解一下,字符串格式化之“数字精度控制”

1 字符串格式化 - 数字精度控制

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

  • m,控制宽度,要求是数字(很少使用),设置的宽度小于数字自身,不生效
  • .n,控制小数点精度,要求是数字,会进行小数的四舍五入

示例:

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

  • %5.2f:表示将宽度控制为5,将小数点精度设置为2

    小数点和小数部分也算入宽度计算。如,对11.345设置了%7.2f 后,结果是:[空格][空格]11.35。2个空格补足宽度,小数部分限制2位精度后,四舍五入为 .35

  • %.2f:表示不限制宽度,只设置小数点精度为2,如11.345设置%.2f后,结果是11.35

体验一下如下代码的快乐吧。

num1 = 11
num2 = 11.345
print("数字11宽度限制5, 结果: %5d" % num1)
print("数字11宽度限制1, 结果: %1d" % num1)
print("数字11.345宽度限制7, 小数精度2 , 结果: %7.2f" % num2)
print("数字11.345不限制宽度 , 小数精度2 , 结果: %.2f" % num2)

运行结果

在这里插入图片描述

在这里插入图片描述

2.8.9 小结
  1. 精度控制的语法是:

m.n的形式控制,如%5d、%5.2f、%.2f

m和.n均可省略

  1. 如果m比数字本身宽度还小,会发生什么事?

m不生效

  1. .n会对小数部分做精度限制,同时:?

会对小数部分做四舍五入

2.8.10 字符串格式方式2
1 字符串格式化 - 快速写法

目前通过%符号占位已经很方便了,还能进行精度控制。

可是追求效率和优雅的Python,是否有更加优雅的方式解决问题呢?

那当然:有

在这里插入图片描述

通过语法:f"内容{变量}"的格式来快速格式化

看如下代码

name = "传智播客"
set_up_year = 2006
stock_price = 19.99
print(f"我是{name},我成立于: {set_up_year}, 我今天的股票价格是: {stock_price}")

运行结果

在这里插入图片描述

【注意】这种写法不做精度控制,也不理会类型,适用于快速格式化字符串

2.8.11 小结
  1. 可以通过

f”{变量} {变量}”的方式进行快速格式化

  1. 这种方式:
  • 不理会类型
  • 不做精度控制

适合对精度没有要求的时候快速使用

2.8.12 对表达式进行格式化
1 字符串格式化 - 表达式的格式化

刚刚的演示,都是基于变量的。

可是,我想更加优雅些,少写点代码,直接对“表达式”进行格式化是否可行呢?

那么,我们先了解一下什么是表达式。

表达式:一条具有明确执行结果的代码语句

如:

1 + 1、5 * 2,就是表达式,因为有具体的结果,结果是一个数字

又或者,常见的变量定义:

name = “张三” age = 11 + 11

等号右侧的都是表达式呢,因为它们有具体的结果,结果赋值给了等号左侧的变量。

那么,对于字符串格式化,能否直接格式化一个表达式呢?

可以,上代码:

print("1 * 1的结果是: %d" % (1 * 1))
print(f"1 * 1的结果是: {1 * 1}")
print("字符串在Python中的类型是: %s" % type('字符串'))

运行结果

在这里插入图片描述

在无需使用变量进行数据存储的时候,可以直接格式化表达式,简化代码哦

2.8.13 小结
  1. 表达式是什么?

表达式就是一个具有明确结果的代码语句,如 1 + 1、type(“字符串”)、3 * 5等

在变量定义的时候,如 age = 11 + 11,等号右侧的就是表达式,也就是有具体的结果,将结果赋值给了等号左侧的变量

  1. 如何格式化表达式?
  • f"{表达式}"
  • “%s%d%f” % (表达式、表达式、表达式)
2.8.14 练习

【股价计算小程序】

定义如下变量:

  • name,公司名
  • stock_price,当前股价
  • stock_code,股票代码
  • stock_price_daily_growth_factor,股票每日增长系数,浮点数类型,比如1.2
  • growth_days,增长天数

计算,经过growth_days天的增长后,股价达到了多少钱

使用字符串格式化进行输出,如果是浮点数,要求小数点精度2位数。

示例输出:

在这里插入图片描述

红色框框都是变量,要使用格式化的方式拼接进去

提示,可以使用: 当前股价 ***** 增长系数 ** 增长天数, 用来计算最终股价哦

如,股价19.99 * 系数1.2 ** 7天 = 71.62778419199998,小数点现在精度2位后结果:71.63

# 公司名
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))

运行结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ding Jiaxiong

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值