Python——第二章:字符串操作——格式化
1. 字符串的格式化问题
举例:要按照如下格式输出一句话
我叫xxx, 我住在xxxx, 我今年xx岁, 我喜欢做xxxxx
这里首先引入占位符概念:
%s
占位字符串%d
占位整数%f
占位小数
因此用这种格式法可以用如下表示方式
name = input("请输入你的名字:") #将输入的值存储在变量 name 中。input 函数返回的是字符串
address = input("请输入你的住址:") #将输入的值存储在变量 adress 中。input 函数返回的是字符串
age = int(input("请输入你的年龄:")) #将输入的值转换为整数类型后存储在变量 age 中。因为 input 函数返回的是字符串,所以使用 int() 函数进行转换。
hobby = input("请输入你的爱好:") #将输入的值存储在变量 hobby 中。input 函数返回的是字符串
#有以下3种写法
chart1 = "我叫%s, 我住在%s, 我今年%d岁, 我喜欢%s" % (name, address, age, hobby)
chart2 = "我叫{}, 我住在{}, 我今年{}岁, 我喜欢{}".format(name, address, age, hobby)
chart3 = f"我叫{name}, 我住在{address}, 我今年{age}岁, 我喜欢{hobby}" # f-string
第一种写法:
chart1 = "我叫%s, 我住在%s, 我今年%d岁, 我喜欢%s" % (name, address, age, hobby)
这种写法使用了字符串格式化,将之前收集到的用户信息插入到一段文本中,形成最终的字符串 chart1
。在字符串中,%s
、%d
等是格式化占位符,它们分别代表字符串和整数的插入位置,而后面的 % (name, address, age, hobby)
则是一个元组,包含了要插入到字符串中的值。
这种写法是按照顺序赋值的,确保了每个变量的值都插入到了正确的位置。每个占位都需要被赋值,而赋值的方法是在% ()中进行按顺序赋值,每个值之间用,隔开。
name
变量的值会替换第一个%s
address
变量的值会替换第二个%s
age
变量的值会替换%d
hobby
变量的值会替换最后一个%s
。
如果你少赋值了一个占位符,比如这样:
chart1 = "我叫%s, 我住在%s, 我今年%d岁,我喜欢%s" % (name, address, age)
在这里少赋值了一个 hobby
在元组中,这时会产生一个 TypeError
错误,提示类似于:
TypeError: not enough arguments for format string
告诉你在格式化字符串时缺少了足够的参数。
特殊写法:占位符仅有一个项,可以不使用()
s0 = "我叫%s" % name
print(s0)
第二种写法:
chart2 = "我叫{}, 我住在{}, 我今年{}岁, 我喜欢{}".format(name, address, age, hobby)
这种方法和之前提到的百分号 %
格式化方法相似,只是使用了不同的语法。
这段代码使用了字符串的 .format()
方法来创建一个包含用户信息的格式化字符串。
"我叫{}, 我住在{}, 我今年{}岁, 我喜欢{}"
:这是一个字符串模板,其中使用了花括号{}
作为占位符,用来指示在这些位置插入后续传入的值。.format(name, address, age, hobby)
:这是字符串的.format()
方法,它用来将传入的值按顺序填充到字符串模板的占位符位置。传入的值依次是name
、address
、age
和hobby
。
在.format()
字符串的格式化 {}
中,你可以使用一些格式化选项来自定义插入的值的样式。以下是一些常用的 {}
格式化选项:
基本用法:
{}
: 默认情况,直接插入值。{:<width}
: 左对齐,指定字段宽度。{:>width}
: 右对齐,指定字段宽度。{:^width}
: 居中对齐,指定字段宽度。
数字格式化:
{:.2f}
: 浮点数,保留两位小数。{:+.2f}
: 带正负号的浮点数,保留两位小数。{:.0f}
: 浮点数,不保留小数部分。
整数格式化:
{:d}
: 整数。{:x}
: 十六进制。{:b}
: 二进制。
字符串格式化:
{:.N}
: 最大长度为 N 的字符串截断。{:.Ns}
: 最小长度为 N 的字符串填充。{:<N}
: 左对齐,最小长度为 N。{:>N}
: 右对齐,最小长度为 N。{:^N}
: 居中对齐,最小长度为 N。
日期时间格式化:
{:%Y-%m-%d}
: 日期格式化为年-月-日。{:%H:%M:%S}
: 时间格式化为时:分:秒。{:%Y-%m-%d %H:%M:%S}
: 日期和时间格式化。
注意,这只是一小部分可能的格式化选项。Python 的格式化字符串支持非常灵活的方式来调整插入值的显示样式。你可以根据需求查阅官方文档或其他资源,以获取更详细和全面的信息。
第三种写法:
f-string 是在 Python 3.6 版本中引入的新特性。在 Python 3.6 以前的版本中是没有 f-string 这种字符串格式化方式的。它的引入极大地简化了字符串插值的操作,使代码更加清晰和易读。所以,如果你使用的是 Python 3.6 及以后的版本,就可以使用 f-string 进行字符串的格式化了。
chart3 = f"我叫{name},我叫{name},我叫{name},我叫{name},我今年{age}岁,我叫{name},我叫{name}" # f-string
这段代码使用了 f-string,它是 Python 中一种最方便的字符串格式化方式,允许你在字符串中直接嵌入变量,并且可以在大括号 {}
内直接使用表达式,不再需要关注顺序位置了。
f"
: 这个字符串以f
开头,表示它是一个 f-string。{name}
: 在字符串中的{}
中,变量name
的值将会被插入。{age}
: 同样,在{}
中插入变量age
的值。
f-string 是一种在字符串中嵌入变量和表达式的格式化方法,它提供了多种方式来进行格式化。以下是一些常见的 f-string 格式化写法:
插入变量:
name = "Alice"
age = 30
f"My name is {name} and I am {age} years old."这个示例中,
{name}
和{age}
是 f-string 的占位符,它们会被对应的变量值替换。结果将是:"My name is Alice and I am 30 years old."数值格式化:
value = 123.456
f"The value is {value:.2f}"这个示例中,
{value:.2f}
表示将变量value
格式化为浮点数,保留两位小数。结果将是:"The value is 123.46".字符串格式化:
text = "Hello, World!"
f"Text: {text.upper()}"这个示例中,
{text.upper()}
调用了字符串方法upper()
来将字符串变成大写。结果将是:"Text: HELLO, WORLD!".表达式计算:
x = 5
y = 10
f"The sum of {x} and {y} is {x + y}"这个示例中,
{x + y}
在大括号中计算了x
和y
的和。结果将是:"The sum of 5 and 10 is 15".字典和属性:
person = {"name": "Bob", "age": 25}
f"My name is {person['name']} and I am {person['age']} years old."这个示例中,通过字典的键访问了对应的值来插入。结果将是:"My name is Bob and I am 25 years old."
调用函数:
def greet(name):
return f"Hello, {name}!" f"{greet('Alice')}"这个示例中,调用了
greet
函数并传递参数'Alice'
,然后将函数返回的字符串插入。结果将是:"Hello, Alice!".在大括号内使用大括号:
value = 42
f"Curly braces inside f-string: {{value}}"这个示例中,由于想要在字符串中插入大括号本身,所以使用了两个连续的大括号。结果将是:"Curly braces inside f-string: {value}".
日期时间格式化:
from datetime import datetime
now = datetime.now()
f"Current date and time: {now:%Y-%m-%d %H:%M:%S}"这个示例中,
{now:%Y-%m-%d %H:%M:%S}
使用日期时间格式化将当前日期和时间按指定格式插入。结果将是:"Current date and time: 2023-08-30 15:30:00".条件表达式:
x = 10
f"{x} is {'even' if x % 2 == 0 else 'odd'}"这个示例中,使用条件表达式来决定插入的文本,如果
x
是偶数,则插入'even'
,否则插入'odd'
。结果将是:"10 is even".嵌套 f-string:
name = "Alice"
age = 30
f"My name is {name.upper()}, and I am {age + 5} years old."这个示例中,嵌套了两个 f-string。首先,
{name.upper()}
将name
转换为大写。其次,{age + 5}
计算了年龄加 5 的结果。结果将是:"My name is ALICE, and I am 35 years old."
这只是一小部分 f-string 的应用示例,它们能够使字符串的格式化更加直观和灵活,可以根据需要插入变量、表达式和函数的返回值。
Python——第二章:字符串操作——格式化的更多相关文章
- 【原创】Python第二章——字符串
字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而 ...
- 简学Python第二章__巧学数据结构文件操作
#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...
- 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况
一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...
- Python中的字符串操作总结(Python3.6.1版本)
Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...
- 【Python自动化Excel】Python与pandas字符串操作
Python之所以能够成为流行的数据分析语言,有一部分原因在于其简洁易用的字符串处理能力. Python的字符串对象封装了很多开箱即用的内置方法,处理单个字符串时十分方便:对于Excel.csv等表格 ...
- python入门7 字符串操作
字符串操作 #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 字符串操作 ""&quo ...
- Python 基础之字符串操作,函数及格式化format
一.字符串的相关操作 1.字符串的拼接 + strvar1 = "我爱你,"strvar2 = "亲爱的姑凉"res = strvar1 + strvar2pr ...
- Python 第二章-列表和元组
第二章-列表和元组 2.0 在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...
- python3-cookbook笔记:第二章 字符串和文本
python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...
- [Python Study Notes]字符串操作
字符串操作 a.字符串格式化输出 name = "liu" print "i am %s " % name #输出: i am liu PS: 字符 ...
随机推荐
- 「codeforces - 868F」Yet Another Minimization Problem
link. 值域分治优化决策单调性 DP 的 trick.朴素做法 trivial,不赘述. 考虑求取一个区间 \([l,r]\) 的 DP 值.先搞定在 \(m=\lfloor\frac{l+r}{ ...
- Solution -「香港网络赛 2016」A+B Problem
Description Link. 给出一个长度为 \(n\) 的序列 \(a\),问有序三元组 \((a_{i},a_{j},a_{k})\) 使得 \(i\neq j\neq k\) 且 \(a_ ...
- Games101现代计算机图形学入门 - 作业1~8 集合含提高项总结
Github 地址 :Games101 作业总结 Games101 官网:Games101 - 现代图形学入门 记录 Games101 Homework 系列 1 ~ 8 及相关作业提高项 环境安装 ...
- JVM面试题、关键原理、JMM
boolean:占用1个字节,取值为true或false. byte:占用1个字节,范围为-128到127. short:占用2个字节,范围为-32,768到32,767. int:占用4个字节,范围 ...
- CopyOnWriteArrayList 写时复制思想
写时复制 conpyOnWrite容器即写时复制容器.往一个容器添加元素的时候,不直接往当前容器Object[]添加,而是先将当前容器Object[]进行Copy,复制出一个新的容器Object[] ...
- 【学习】fhq-treap
fhq-treap 是一种好写.复杂度低,且功能的优秀数据结构,涵盖了 treap 几乎所有的功能,其巧妙之处,就在于运用分离和合并两种操作代替了旋转操作. 1. BST 的定义 (摘自 OI Wik ...
- Atcoder Regular Contest 165
B. Sliding Window Sort 2 被题目名里的滑动窗口误导了,于是卡 B 40min /fn Description 给定长度为 \(n\) 的排列 \(P\) 和一个整数 \(K\) ...
- 一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel
前言 日常工作中经常与数据打交道的同学肯定会难以避免对Excel的一些数据操作如导入.导出等,但是当对一些大数据量操作Excel时经常会遇到一个常见的问题内存溢出.今天给大家推荐一个简单.高效.低内存 ...
- RSA总结 From La神
常用工具 分解大素数 factordb (http://www.factordb.com / API: http://factordb.com/api?query=) yafu (p q 相差过大或过 ...
- linux锁定脚本防止脚本重复运行
问题描述:设置在定时任务中的脚本一定要注意防止脚本重复执行,要不然会带来一些想象不到的结果. 方式一:使用锁定文件的方式来进行防止脚本重复运行,类似数据库socket文件,但是这种情况有一种弊端就是, ...