【Python入门】字符串的扩展

news2024/11/18 14:02:48

在这里插入图片描述
前言

📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。
📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函数、函数进阶、数据容器、文件操作、异常模块与包、数据可视化等,持续更新,请大家拭目以待恒川的专栏!
📘相关专栏C语言初阶、C语言进阶、恒川的日常汇报、大家有兴趣的可以看一看
📙Java等专栏正在发展,拭目以待!


字符串的扩展

  • 1. 字符串的三种定义方式
    • 1.1 字符串在Python中有多种定义形式
    • 1.2 字符串的引号嵌套
    • 1.3 总结
  • 2. 字符串拼接
    • 2.1 如何拼接字符串
    • 2.2 总结
  • 3. 字符串格式化
    • 3.1 掌握通过占位的形式拼接字符串
    • 3.2 总结
  • 4. 格式化的精度控制
    • 4.1 格式化字符串的过程中做数字的精度控制
    • 4.2 字符串格式化 - 数字精度控制
    • 4.3 总结
  • 5. 字符串格式化方式2
    • 5.1 字符串格式化 - 快速写法
    • 5.2 总结
  • 6. 对表达式进行格式化
    • 6.1 什么是表达式
    • 6.2 表达式进行字符串格式化
    • 6.3 总结
    • 6.4 股价计算小程序练习

1. 字符串的三种定义方式

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

  1. 单引号定义法:‘’
  2. 双引号定义法:‘’ ‘’
  3. 三引号定义法:‘’’ ‘’’
"""
演示字符串的三种定义方式:
- 单引号定义法
- 双引号定义法
- 三引号定义法
"""

# 单引号定义法,使用单引号进行包围
name = '热爱跑步的恒川'
print(type(name))
# 双引号定义法
name = "热爱跑步的恒川"
print(type(name))
# 三引号定义法,写法和多行注释是一样的
name = """
热爱
跑步
的恒川
"""
print(type(name))

三引号定义法,和多行注释的写法一样,同样支持换行操作。
使用变量接收它,它就是字符串
不使用变量接收它,就可以作为多行注释使用。

1.2 字符串的引号嵌套

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

  1. 单引号定义法,可以内含双引号
  2. 双引号定义法,可以内含单引号
  3. 可以使用转移字符(\)来将引号解除效用,变成普通字符串

代码如下:

# 在字符串内 包含双引号
name = '"热爱跑步的恒川"'
print(name)
# 在字符串内 包含单引号
name = "'热爱跑步的恒川'"
print(name)
# 使用转义字符 \ 解除引号的效用
name = "\"热爱跑步的恒川\""
print(name)
name = '\'热爱跑步的恒川\''
print(name)

代码结果:
在这里插入图片描述

1.3 总结

  1. 字符串的三种定义方式:
  • 单引号方式
  • 双引号方式
  • 三引号方式
  1. 引号的嵌套
  • 可以使用:\来进行转义
  • 单引号内可以写双引号或双引号内可以写单引号

2. 字符串拼接

2.1 如何拼接字符串

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

print("热爱跑步" + "的恒川")

输出结果:

热爱跑步的恒川

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

name = "热爱跑步的恒川"
print("我是:" + name + ",我喜欢跑步")

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

  • name,内容是“热爱跑步的恒川”
  • address,内容是“北京朝阳区东大街”

要求写程序通过print语句以及字符串拼接的方式输出:
“我是:热爱跑步的恒川,我的地址是:北京朝阳区东大街“
代码如下:

# 字符串字面量和字符串变量的拼接
name = "热爱跑步的恒川"
address = "北京朝阳区东大街"

在这里插入图片描述
既然可以和字符串变量完成拼接,那么,是否可以和其它变量类型如数字类型完成拼接呢?

让我们试一试。

name = "热爱跑步的恒川"
address = "北京朝阳区东大街"
tel = 7854463321
print("我是:" + name + ",我的地址是:" + address + ",我的电话是:" + tel)

代码结果:
在这里插入图片描述

发现:字符串无法和非字符串变量(数字)进行拼接,因为类型不一致,无法接上

2.2 总结

  1. 如何完成字符串拼接?
    使用“+”号连接字符串变量或字符串字面量即可
  2. 有哪些注意事项?
    无法和非字符串类型进行拼接

3. 字符串格式化

3.1 掌握通过占位的形式拼接字符串

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

  1. 变量过多,拼接起来实在是太麻烦了
  2. 字符串无法和数字或其它类型完成拼接。

在这里插入图片描述
所以,有没有其它方式,即方便又支持拼接其它类型呢?
我们可以通过如下语法,完成字符串和变量的快速拼接。

# 通过占位的形式,完成拼接
name = "恒川"
message = "热爱跑步:%s" % name
print(message)

其中的,%s

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

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

那,数字类型呢?可以不可以占位?
那必须可以,我们来尝试如下代码:

# 通过占位的形式,完成数字和字符串的拼接
class_num = 57
avg_salary = 16781
message = "Python大数据学科,北京%s期,毕业平均工资:%s" % (class_num, avg_salary)
print(message)

代码结果:

Python大数据学科,北京57期,毕业平均工资:16781

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

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

思考:
数字类型,也太没有地位了吧,竟然要被转成字符串拼接。
有没有体面一点的方式,让数字以其原本的面貌拼接进去呢?
当然可以了
Python中,其实支持非常多的数据类型占位
最常用的是如下三类
在这里插入图片描述
如下代码,完成字符串、整数、浮点数,三种不同类型变量的占位

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

3.2 总结

  1. 字符串格式化的语法?
    “%占位符” % 变量
  2. 常用占位符有哪3个?
  • 字符串:%s
  • 整数: %d
  • 浮点数: %f

4. 格式化的精度控制

4.1 格式化字符串的过程中做数字的精度控制

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

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

代码结果:

传智播客,成立于:2006,我今天的股价是:19.990000

细心的同学可能会发现:
浮点数19.99,变成了19.990000输出
这里我们就要讲解一下,字符串格式化之数字精度控制

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

我们可以使用辅助符号"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)

代码结果:

数字11宽度限制5,结果是:   11
数字11宽度限制1,结果是:11
数字11.345宽度限制7,小数精度2,结果是:  11.35
数字11.345不限制,小数精度2,结果是:11.35

4.3 总结

  1. 精度控制的语法是:
    m.n的形式控制,如%5d、%5.2f、%.2f
    m和.n均可省略
  2. 如果m比数字本身宽度还小,会发生什么事?
    m不生效
  3. .n会对小数部分做精度限制,同时:?
    会对小数部分做四舍五入

5. 字符串格式化方式2

5.1 字符串格式化 - 快速写法

目前通过%符号占位已经很方便了,还能进行精度控制。
可是追求效率和优雅的Python,是否有更加优雅的方式解决问题呢?
那当然:有
通过语法:f"内容{变量}"的格式来快速格式化
看如下代码

"""
演示第二种字符串格式化的方式:f"{占位}"
"""
name = "恒川"
set_up_year = 2022
stock_price = 190.9
# f: format
print(f"我是{name},我热爱跑步在:{set_up_year}年,我今天的热量是:{stock_price}")

代码结果:

我是恒川,我热爱跑步在:2022年,我今天的热量是:190.9

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

5.2 总结

  1. 可以通过
    f”{变量} {变量}”的方式进行快速格式化

  2. 这种方式:

  • 不理会类型
  • 不做精度控制
    适合对精度没有要求的时候快速使用

6. 对表达式进行格式化

6.1 什么是表达式

刚刚的演示,都是基于变量的。
可是,我想更加优雅些,少写点代码,直接对“表达式”进行格式化是否可行呢?
那么,我们先了解一下什么是表达式。

表达式:一条具有明确执行结果的代码语句
如:
1 + 1、5 * 2,就是表达式,因为有具体的结果,结果是一个数字
又或者,常见的变量定义:
name = “张三” age = 11 + 11
等号右侧的都是表达式呢,因为它们有具体的结果,结果赋值给了等号左侧的变量。

6.2 表达式进行字符串格式化

那么,对于字符串格式化,能否直接格式化一个表达式呢?
可以,上代码:

"""
演示对表达式进行字符串格式化
"""
print("1 * 1 的结果是:%d" % (1 * 1))
print(f"1 * 2的结果是:{1 * 2}")
print("字符串在Python中的类型名是:%s" % type("字符串"))

代码结果:

1 * 1 的结果是:1
1 * 2的结果是:2
字符串在Python中的类型名是:<class 'str'>

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

6.3 总结

  1. 表达式是什么?
    表达式就是一个具有明确结果的代码语句,如 1 + 1、type(“字符串”)、3 * 5等
    在变量定义的时候,如 age = 11 + 11,等号右侧的就是表达式,也就是有具体的结果,将结果赋值给了等号左侧的变量
  2. 如何格式化表达式?
  • f"{表达式}"
  • “%s \ %d \ %f” % (表达式、表达式、表达式)

6.4 股价计算小程序练习

定义如下变量:

  • 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
# 每天都在增长,然后连续增长七天,七天的增长都是1.2,所以是1.2的七次方
finally_stock_price = stock_price * stock_price_daily_growth_factor ** growth_days

print(f"公司:{name},股票代码:{stock_code},当前股价:{stock_price}")
print("每日增长系数: %.1f,经过%d天的增长后,股价达到了:%.2f" % (stock_price_daily_growth_factor, growth_days, finally_stock_price))
# 这里的f注意要写成保留几位的形式

如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

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

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

相关文章

Nginx介绍及安装

简介 Nginx 是一个高性能的 HTTP 和反向代理服务器。它最初由 Nigel Cook 开发&#xff0c;旨在解决 Apache 服务器在高并发环境下性能瓶颈的问题。Nginx 具有占用资源少、处理能力强等优点&#xff0c;在互联网应用中广泛应用于静态资源服务、反向代理、负载均衡、HTTP缓存、…

2023年web前端开发之JavaScript进阶(一)

接上篇博客进行学习,通俗易懂,详细 博客地址: 2023年web前端开发之JavaScript基础(五)基础完结_努力的小周同学的博客-CSDN博客 学习内容 学习 作用域、变量提升、 闭包等语言特征&#xff0c;加深对 JavaScript 的理解&#xff0c;掌握变量赋值、函数声明的简洁语法&#xff0…

rs485转tcp网关盒子怎么用(rs485协议转以太网tcp/ip)

随着工业自动化技术的不断发展&#xff0c;越来越多的工业设备在使用时需要进行数据通信。其中&#xff0c;RS485通信协议是一种常见的工业通信协议&#xff0c;而TCP/IP协议则是互联网通信的标准协议。为了实现RS485协议与TCP/IP协议之间的通信&#xff0c;可以使用RS485转TCP…

【Java】面试常问知识点(Java基础—2)

Java基础 多线程的状态 新建状态 当用new操作符创建一个线程时&#xff0c; 例如new Thread(r)&#xff0c;线程还没有开始运行&#xff0c;此时线程处在新建状态。 当一个线程处于新生状态时&#xff0c;程序还没有开始运行线程中的代码 就绪状态 一个新创建的线程并不自动…

ChatGLM-6B微调与部署

文章目录 基于ChatGLM-6B的推理与部署配置环境与准备配置环境模型文件准备 代码运行 Demo命令行 Demo基于 Gradio 的网页版 Demo基于 Streamlit 的网页版 Demo 基于peft框架的LoRA微调ChatGLM-6B配置环境与准备配置环境模型文件准备数据准备数据处理 微调过程 基于P-Tuning v2微…

stm32影子寄存器、预装载寄存器,TIM_OC1PreloadConfig和TIM_ARRPreloadConfig的作用

一直没搞清楚stm32定时器的TIM_OC1PreloadConfig、TIM_ARRPreloadConfig函数的作用&#xff0c;影子寄存器、预装载寄存器、重载寄存器的概念。今天来研究一下&#xff1a; 首先看定时器的框图&#xff1a; 图中有阴影的小方框&#xff0c;代表该功能对应的寄存器有影子寄存器&…

Canal实战使用(集群部署)和原理解析

1.mysql数据同步工作原理 MySQL master将数据变更写入二进制日志(binary log&#xff0c;其中记录叫做二进制日志事件binary log events&#xff0c;可以通过 show binlog events 进行查看) MySQL slave将master的binary log events拷贝到它的中继日志(relay log) MySQL slav…

Java基础(十八)网络编程

1. 网络编程概述 Java是 Internet 上的语言&#xff0c;它从语言级上提供了对网络应用程序的支持&#xff0c;程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库&#xff0c;可以实现无痛的网络连接&#xff0c;联网的底层细节被隐藏在 Java 的本机安装系统里&am…

软件测试培训了几个月,找到工作了,面试经验分享给各位

面试问的一些基本问题 功能方面&#xff1a;问的最多的就是测试流程&#xff0c;测试计划包含哪些内容&#xff0c;公司人员配置&#xff0c;有bug开发认为不是 bug怎么处理&#xff0c;怎样才算是好的用例&#xff0c;测试用例设计方法&#xff08;等价类&#xff0c;边界值等…

无线之红外线技术的组网方式详解

红外线(Infrared rays)也是一种光线&#xff0c;由于它的波长比红色光750nm)还长&#xff0c;超出了人眼可以识别的可见光&#xff09;范围&#xff0c;所以我们看不见它&#xff0c;又称为红外热辐射(Infrared radiation)&#xff0c;通常把波长为0.75&#xff5e;1000μm的光…

腾讯高工手写13W字“Netty速成手册”,3天走向实战

前言 在java界&#xff0c;netty无疑是开发网络应用的拿手菜。你不需要太多关注复杂的nio模型和底层网络的细节&#xff0c;使用其丰富的接口&#xff0c;可以很容易的实现复杂的通讯功能。 作为当前最流行的NIO框架&#xff0c;Netty在互联网领域、大数据分布式计算领域、游…

【Linux0.11代码分析】02 之 bootsect.s 启动流程

【Linux0.11代码分析】02 之 bootsect.s 启动流程 一、boot\bootsect.s1.1 将bootsect.s 从0x7c00 移动到 0x90000 &#xff08;512byte&#xff09;1.2 使用 int 0x13 中断加载 setup.s 程序到 0x902001.3 获取并解析磁盘驱动器的参数1.4 开始加载 System模块到 0x10000 地址1…

计算机网络之应用层

文章目录 应用层1. 应用层协议原理1.1 网络应用程序体系结构1.2 进程通信1.3 可供程序使用的运输服务1.4 因特网提供的运输服务1.5 应用层协议 2.Web应用和HTTP协议2.1 HTTP概况2.2 非持久连接和持久连接2.3 HTTP报文格式2.4 用户服务器的交互&#xff1a;cookie2.5 Web缓存器 …

数字医疗算法应用创新大赛-食品与疾病关系预测算法赛道top5方案分享

一、比赛地址和背景 1.1 比赛地址 比赛地址 1.2 数据说明及任务 本次算法赛将提供超过 23.5W 的食物、疾病对应关系及其量化得分&#xff0c;其中食物特征超过 200 个&#xff0c;疾病特征由 3 种不同的方式抽取&#xff0c;累积超过 4000 个特征信息。初赛为 0、1 二分类预…

递归递推练习题

1.用递归的方法123…N的值&#xff08;in:5,out:15&#xff09; 2.输出斐波那契数列的第N项&#xff0c;0&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13…(in:3,out:1) 3.求n!&#xff08;in:5,out:120&#xff09;n!123……

STM32启动/下载模式

启动模式 主闪存存储器区存放用户设计的代码&#xff0c;代码烧录到这里&#xff0c;一般情况在正常工作时需要把STM32设置为从这里启动。 系统存储器区用来实现ISP功能的。 内嵌SRAM区用来实现调试器调试功能的。 ISP ISP一般由PC机通过串口把bin/hex文件直接烧写到单片机内…

java并发编程之美第五章读书笔记

java并发包中并发List源码剖析 介绍 CopyOnWriteArrayList 线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)进行的,也就是写时复制策略 类图 每一个对象里面有一个array数组进行存放具体的元素,ReentrantLock独占锁对象用来保证同时只有一个线程对…

Maven中optional标签详解

这一篇文章应该是全网讲解optional最细致的&#xff0c;因为我都是拿我自己的试验来证明&#xff0c;从试验当中也发现了很多出乎意外的知识&#xff01;感兴趣的跟着小编一块来学习呀&#xff01; 目录 一、前言二、依赖传递代码演示三、是否会影响父子工程之间的依赖继承呢&a…

精致女孩必备的6款APP,内外兼修,提升气质

自立自强、敢于追求、内外兼修&#xff0c;这样的女孩不管在哪个时代都是非常有魅力的&#xff01; 在我看来&#xff0c;自律、上进、情商高、会打扮、会赚钱、独立、落落大方&#xff0c;这才是精致女孩该有的样子。 不墨迹&#xff0c;速速揭开6款宝藏APP的面纱&#xff0…

石头科技2022年营收实现双位数增长,以技术实力打响创新价值战

近日&#xff0c;石头科技披露了2022年度财务报告&#xff0c;报告显示&#xff0c;在在较大内外部压力下&#xff0c;石头科技2022年营收依然实现双位数增长&#xff0c;且境内外销售收入平稳增长。 该公司在近年来不断完善其产品矩阵&#xff0c;目前已推出手持无线吸尘、商…