查看: 366|回复: 3

Python格式化输出与换行控制:f-string和%占位符

[复制链接]
发表于 昨天 11:00 | 显示全部楼层 |阅读模式
Python程序与用户交互时,输入和输出是最基础的操作。input()函数获取用户输入,print()函数输出结果,而格式化输出则让数据显示更规范。本文将系统总结Python的输入输出核心用法,包括input()的字符串返回特性、f-string与%占位符两种主流格式化方式,以及print()函数中end和sep参数对换行与分隔符的控制。

## input()获取用户输入

input()会等待键盘输入,并将输入内容作为字符串返回。基本用法:
  1. name = input("请输入你的名字:")
  2. print(f"你好,{name}!")
复制代码

如果需要数字,必须手动转换类型:
  1. age = int(input("请输入你的年龄:"))
  2. print(f"明年你就{age + 1}岁了")
  3. height = float(input("请输入身高(米):"))
复制代码

注意:input()在用户输入回车前会阻塞程序;所有输入均视为字符串;数字运算前务必用int()或float()转换,否则会引发TypeError。

## 格式化输出:f-string vs %占位符

### f-string(Python 3.6+)

f-string在字符串前加f或F,花括号内直接写变量或表达式,语法简洁且执行效率高。

基本用法:
  1. name = "张三"
  2. age = 25
  3. print(f"姓名:{name},年龄:{age}")
复制代码

支持表达式计算:
  1. a, b = 10, 20
  2. print(f"{a} + {b} = {a + b}")
复制代码

数字格式化:
  1. pi = 3.1415926
  2. print(f"π的值:{pi:.2f}")   # 保留两位小数
  3. print(f"π的值:{pi:.4f}")   # 保留四位小数
复制代码

对齐与填充:
  1. number = 42
  2. print(f"数字:{number:>10}")   # 右对齐,宽度10
  3. print(f"数字:{number:<10}")   # 左对齐
  4. print(f"数字:{number:^10}")   # 居中对齐
  5. print(f"数字:{number:0>10}")  # 用0填充
复制代码

### %占位符(传统兼容方式)

%格式化在Python所有版本中均可用,使用%操作符,通过格式符指定变量类型。

基本用法:
  1. name = "李四"
  2. age = 30
  3. print("姓名:%s,年龄:%d" % (name, age))
复制代码

常用格式符:%s字符串、%d十进制整数、%f浮点数、%x十六进制、%o八进制。

浮点数精度与宽度控制:
  1. price = 99.99
  2. print("价格:%.2f元" % price)        # 保留两位小数
  3. print("价格:%10.2f元" % price)      # 宽度10,右对齐
复制代码

多变量时用元组:
  1. x, y, z = 10, 20, 30
  2. print("x=%d, y=%d, z=%d" % (x, y, z))
复制代码

支持字典形式的命名引用:
  1. person = {"name": "王五", "age": 35}
  2. print("姓名:%(name)s,年龄:%(age)d" % person)
复制代码

## print()的换行与分隔符控制

print()函数默认在输出末尾添加换行符,该行为由end参数控制(默认'\n')。

### 默认换行
  1. print("第一行")
  2. print("第二行")
  3. # 输出:
  4. # 第一行
  5. # 第二行
复制代码

### 不换行输出

将end设为空字符串或空格:
  1. print("Hello", end='')
  2. print("World")
  3. # 输出:HelloWorld
  4. print("Hello", end=' ')
  5. print("World")
  6. # 输出:Hello World
  7. print("Hello", end=', ')
  8. print("World")
  9. # 输出:Hello, World
复制代码

### 自定义分隔符

可以使用制表符、多个空格或自定义字符串:
  1. print("姓名", end='\t')
  2. print("张三")
  3. # 输出:姓名    张三
  4. print("第一部分", end=' --- ')
  5. print("第二部分")
  6. # 输出:第一部分 --- 第二部分
复制代码

### sep参数与end参数的区别

sep控制print内多个参数之间的分隔符(默认空格),end控制整个print输出结束后添加的字符。
  1. print("a", "b", "c")                # 输出:a b c
  2. print("a", "b", "c", sep=',')       # 输出:a,b,c
  3. print("第一行", end=' | ')
  4. print("第二行")
  5. # 输出:第一行 | 第二行
  6. print("x", "y", "z", sep='-', end=' -> ')
  7. print("结束")
  8. # 输出:x-y-z -> 结束
复制代码

## 综合示例:用户信息录入与格式化输出

结合input、类型转换、f-string和%格式化,并演示不换行输出:
  1. print("=== 用户信息录入 ===")
  2. name = input("请输入姓名:")
  3. age = int(input("请输入年龄:"))
  4. height = float(input("请输入身高(米):"))
  5. print(f"\n使用f-string格式化:")
  6. print(f"姓名:{name:>10}")
  7. print(f"年龄:{age:>10}岁")
  8. print(f"身高:{height:>10.2f}米")
  9. print(f"\n使用%占位符格式化:")
  10. print("姓名:%10s" % name)
  11. print("年龄:%10d岁" % age)
  12. print("身高:%10.2f米" % height)
  13. print(f"\n个人信息汇总:", end=' ')
  14. print(f"姓名:{name}", end=', ')
  15. print(f"年龄:{age}", end=', ')
  16. print(f"身高:{height:.2f}")
复制代码

## 总结

格式化输出选择:
- Python 3.6及以上优先使用f-string,简洁且性能好。
- 需兼容旧版本Python时,用%占位符或str.format()。
- 复杂格式(如对齐、填充、精度控制)两种方式均支持。

换行控制建议:
- 默认换行保持代码可读性。
- 当需要连续输出(如进度条、倒计时)时,使用end=''或end=' '。
- 输出列表等场景可通过sep参数自定义分隔符。

掌握这些技巧后,你的Python程序在用户交互和数据展示方面将更加灵活高效。
回复

使用道具 举报

发表于 昨天 11:05 | 显示全部楼层

Re: Python格式化输出与换行控制:f-string和%占位符

感谢楼主的分享,总结得非常清晰实用!特别是f-string和%占位符的对比,以及print()中end和sep参数的区别,对新手很友好。我平时主要用f-string,但偶尔在维护老旧代码时也会遇到%格式化,楼主的字典命名引用例子正好提醒了我这种用法。想请教一个小问题:在f-string里做数字对齐时,如果宽度小于数字本身的位数,会按实际长度显示吗?还是说会截断或报错?
回复 支持 反对

使用道具 举报

发表于 昨天 11:05 | 显示全部楼层

Re: Python格式化输出与换行控制:f-string和%占位符

感谢楼主整理!这篇总结非常清晰,把 Python 输入输出的几个关键点都覆盖了,尤其是 f-string 和 % 占位符的对比,以及 `end` 和 `sep` 参数的实际区别,例子也都很典型。对新手来说,像是 `input()` 返回字符串需要手动转换类型、以及不换行输出的几种应用场景,都很实用。收藏了,以后当速查手册用很方便!
回复 支持 反对

使用道具 举报

发表于 昨天 11:05 | 显示全部楼层

Re: Python格式化输出与换行控制:f-string和%占位符

非常好的总结!input()的类型转换确实是新人容易踩坑的地方,我也经常会忘记 int() 转换就进行运算,直接报 TypeError。f-string 写起来确实舒服,而且性能更好,现在几乎不用 % 占位符了。print 的 sep 和 end 参数在拼接输出时也很实用,比如写进度条或调试信息。感谢分享!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-17 04:04 , Processed in 0.029577 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部