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() 方法来创建一个包含用户信息的格式化字符串。

  1. "我叫{}, 我住在{}, 我今年{}岁, 我喜欢{}":这是一个字符串模板,其中使用了花括号 {} 作为占位符,用来指示在这些位置插入后续传入的值。

  2. .format(name, address, age, hobby):这是字符串的 .format() 方法,它用来将传入的值按顺序填充到字符串模板的占位符位置。传入的值依次是 nameaddressagehobby

.format()字符串的格式化 {} 中,你可以使用一些格式化选项来自定义插入的值的样式。以下是一些常用的 {} 格式化选项:

  1. 基本用法:

    • {}: 默认情况,直接插入值。
    • {:<width}: 左对齐,指定字段宽度。
    • {:>width}: 右对齐,指定字段宽度。
    • {:^width}: 居中对齐,指定字段宽度。
  2. 数字格式化:

    • {:.2f}: 浮点数,保留两位小数。
    • {:+.2f}: 带正负号的浮点数,保留两位小数。
    • {:.0f}: 浮点数,不保留小数部分。
  3. 整数格式化:

    • {:d}: 整数。
    • {:x}: 十六进制。
    • {:b}: 二进制。
  4. 字符串格式化:

    • {:.N}: 最大长度为 N 的字符串截断。
    • {:.Ns}: 最小长度为 N 的字符串填充。
    • {:<N}: 左对齐,最小长度为 N。
    • {:>N}: 右对齐,最小长度为 N。
    • {:^N}: 居中对齐,最小长度为 N。
  5. 日期时间格式化:

    • {:%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 格式化写法:

  1. 插入变量:

    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."

  2. 数值格式化:

    value = 123.456
    f"The value is {value:.2f}"

    这个示例中,{value:.2f} 表示将变量 value 格式化为浮点数,保留两位小数。结果将是:"The value is 123.46".

  3. 字符串格式化:

    text = "Hello, World!"
    f"Text: {text.upper()}"

    这个示例中,{text.upper()} 调用了字符串方法 upper() 来将字符串变成大写。结果将是:"Text: HELLO, WORLD!".

  4. 表达式计算:

    x = 5
    y = 10
    f"The sum of {x} and {y} is {x + y}"

    这个示例中,{x + y} 在大括号中计算了 xy 的和。结果将是:"The sum of 5 and 10 is 15".

  5. 字典和属性:

    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."

  6. 调用函数:

    def greet(name):
    return f"Hello, {name}!" f"{greet('Alice')}"

    这个示例中,调用了 greet 函数并传递参数 'Alice',然后将函数返回的字符串插入。结果将是:"Hello, Alice!".

  7. 在大括号内使用大括号:

    value = 42
    f"Curly braces inside f-string: {{value}}"

    这个示例中,由于想要在字符串中插入大括号本身,所以使用了两个连续的大括号。结果将是:"Curly braces inside f-string: {value}".

  8. 日期时间格式化:

    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".

  9. 条件表达式:

    x = 10
    f"{x} is {'even' if x % 2 == 0 else 'odd'}"

    这个示例中,使用条件表达式来决定插入的文本,如果 x 是偶数,则插入 'even',否则插入 'odd'。结果将是:"10 is even".

  10. 嵌套 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——第二章:字符串操作——格式化的更多相关文章

  1. 【原创】Python第二章——字符串

    字符串是一个字符序列,(提醒:序列是Python的一个重要的关键词),其中存放UNICODE字符.Python中的字符串是不可变的(immutable),即对字符串执行操作时,总是产生一个新的字符串而 ...

  2. 简学Python第二章__巧学数据结构文件操作

    #cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...

  3. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况

    一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...

  4. Python中的字符串操作总结(Python3.6.1版本)

    Python中的字符串操作(Python3.6.1版本) (1)切片操作: str1="hello world!" str1[1:3] <=> 'el'(左闭右开:即是 ...

  5. 【Python自动化Excel】Python与pandas字符串操作

    Python之所以能够成为流行的数据分析语言,有一部分原因在于其简洁易用的字符串处理能力. Python的字符串对象封装了很多开箱即用的内置方法,处理单个字符串时十分方便:对于Excel.csv等表格 ...

  6. python入门7 字符串操作

    字符串操作 #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 字符串操作 ""&quo ...

  7. Python 基础之字符串操作,函数及格式化format

    一.字符串的相关操作 1.字符串的拼接 + strvar1 = "我爱你,"strvar2 = "亲爱的姑凉"res = strvar1 + strvar2pr ...

  8. Python 第二章-列表和元组

    第二章-列表和元组 2.0      在Python中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序列号-即元素的位置, 也称为索引.第一个索引是0,第二个是1,以此类推. ...

  9. python3-cookbook笔记:第二章 字符串和文本

    python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...

  10. [Python Study Notes]字符串操作

    字符串操作 a.字符串格式化输出 name = "liu" print "i am %s " % name     #输出: i am liu   PS: 字符 ...

随机推荐

  1. 图解Spark排序算子sortBy的核心源码

    原创/朱季谦 一.案例说明 以前刚开始学习Spark的时候,在练习排序算子sortBy的时候,曾发现一个有趣的现象是,在使用排序算子sortBy后直接打印的话,发现打印的结果是乱序的,并没有出现完整排 ...

  2. xmind文件数据解析重构成mindmap可识别数据

    [需求背景] 测试平台开发中,需要引入前端mindmap模块,进行在线xmind实时解析并前端展示 [卡点难点] 选取什么库进行xmind解析 如何转换成mindmap可以识别的数据 [xmind解析 ...

  3. C++ RAII在HotSpot VM中的重要应用

    RAII(Resource Acquisition Is Initialization),也称为"资源获取就是初始化",是C++语言的一种管理资源.避免泄漏的惯用法.C++标准保证 ...

  4. MySQL实战实战系列 06 全局锁和表锁 :给表加个字段怎么有这么多阻碍?

    今天我要跟你聊聊 MySQL 的锁.数据库锁设计的初衷是处理并发问题.作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则.而锁就是用来实现这些访问规则的重要数据结构. 根据 ...

  5. day02 数据类型转换 运算符 方法

    数据类型转换 自动类型转换 强制类型转换 1. 自动类型转换:就是范围小的向范围大的转换  将取值范围小刀的类型自动提升为取值范围大的类型. 转换规则  byte.short.char  int--- ...

  6. 12. 用Rust手把手编写一个wmproxy(代理,内网穿透等), TLS的双向认证信息及token验证

    12. 用Rust手把手编写一个wmproxy(代理,内网穿透等), TLS的双向认证信息及token验证 项目 ++wmproxy++ gite: https://gitee.com/tickbh/ ...

  7. 轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南

    引言 我们将继续深入研究组件启动专题.在之前的文章中,我们已经详细介绍了Redis的各种配置使用方法,为读者提供了全面的指导.然而,今天我们将转向另一个备受关注的数据库--MongoDB.MongoD ...

  8. Util应用框架快速入门(4) - 集成测试开发入门

    本文演示Util应用框架开发的项目中如何编写集成测试. 准备 完成 Web Api 快速入门,本文将在之前生成的示例项目上讲解集成测试的开发. 测试概述 自动化测试对于Util应用框架的开发非常重要, ...

  9. Java面向对象(高级)

    1.类变量 类变量是被类的所有实例共享的. 类变量具体放的位置在哪?在内存中的那个区域,这和jdk的版本是有关的 静态变量在类加载的时候就生成了,即使没有创建类实例也能访问,当然通过实例来实现 类变量 ...

  10. tomcat nio2源码分析

    一. 前言 ​ 最近在看tomcat connector组件的相关源码,对Nio2的异步回调过程颇有兴趣,平时读源码不读,自己读的时候很多流程都没搞明白,去查网上相关解析讲的给我感觉也不是特别清晰,于 ...