系列文章
Python 从入门到精通
第 9 / 12 篇
从环境安装和基础语法出发,逐步学习工程实践、自动化、数据处理与 Web 开发。
-
01
Python 怎么装、怎么用 -
02
变量、数字和字符串 -
03
列表:把一组数据放在一起 -
04
元组、集合和字典 -
05
条件判断:让程序做选择 -
06
循环:重复的事交给程序 -
07
函数:把代码整理成可复用的块 -
08
模块与包:拆分你的程序 -
09
输入、输出与字符串格式化正在阅读 -
10
文件读写:保存程序的数据 -
11
异常处理:程序出错时怎么办 -
12
基础阶段练习:命令行记账本
程序不是写给自己看的,是要跟人打交道的:人要输入点什么,程序要输出点什么。这一篇把输入、输出和字符串格式化讲透——别小看它们,这是每个程序的门面。
input():让用户说话
input() 会暂停程序,等用户敲键盘回车,然后返回输入的内容(永远是字符串):
name = input("你叫什么名字?")
print(f"你好,{name}!")
运行效果(▢ 表示用户输入):
你叫什么名字?南山▢
你好,南山!
最容易踩的坑:input() 返回的是字符串!要做数学运算必须先转换:
age = input("你多大了?")
# print(age + 1) # 报错!TypeError: can only concatenate str (not "int") to str
age = int(input("你多大了?")) # 先转成整数
print(f"明年你就 {age + 1} 岁了")
用户可能输入乱七八糟的东西,int("abc") 会报 ValueError。健壮的做法是捕获异常(后面异常处理那篇细讲)或用 try 兜底。
print() 的高级用法
print 不止能打印一个值,还有两个好用的参数:
# sep:多个值之间用什么分隔(默认空格)
print("南山", "小站", "开张") # 南山 小站 开张
print("南山", "小站", "开张", sep="-") # 南山-小站-开张
print("2026", "08", "14", sep="/") # 2026/08/14
# end:结尾用什么(默认换行 n)
print("加载中", end="")
print("...完成") # 加载中...完成(不换行)
print("第 1 行", end=" | ")
print("第 2 行") # 第 1 行 | 第 2 行
f-string 进阶
f-string 除了塞变量,还能做格式化。花括号里变量后面加冒号 + 格式说明:
pi = 3.1415926535
print(f"{pi:.2f}") # 3.14(保留 2 位小数)
print(f"{pi:.4f}") # 3.1416(四舍五入)
n = 42
print(f"{n:05d}") # 00042(补零到 5 位)
print(f"{n:<5}结束") # 42 结束(左对齐占 5 位)
print(f"{n:>5}") # 42(右对齐)
money = 1234567
print(f"{money:,}") # 1,234,567(千分位分隔)
rate = 0.856
print(f"{rate:.1%}") # 85.6%(百分比格式)
name = "南山"
print(f"{name:*^10}") # ****南山****(居中,两侧填 *)
这些格式符记不住没关系,知道”冒号后面能跟格式”就行,用到再查。
更早的两种格式化(了解即可)
你会看到老代码用这两种方式,认识一下,别被吓到:
# % 格式化(C 语言风格,老代码常见)
name = "南山"
age = 1
print("%s 已经 %d 岁了" % (name, age))
# format() 方法(Python 2.6+ / 3.x 中间时代)
print("{} 已经 {} 岁了".format(name, age))
print("{0} 和 {1}".format("a", "b")) # 按下标
print("{name} 在 {city}".format(name="南山", city="敦化"))
新代码统一用 f-string,可读性最好。但读老代码时这两种要认得。
字符串常用方法
趁这篇把字符串的常用操作一起过了:
s = " Hello, 南山小站 "
print(s.strip()) # "Hello, 南山小站"(去掉首尾空白)
print(s.lower()) # 全小写
print(s.upper()) # 全大写
print(s.replace("南山", "北山")) # 替换
print(s.split(",")) # [' Hello', ' 南山小站 '](按逗号切分)
print(s.startswith(" ")) # True(以什么开头)
print(s.endswith(" ")) # True(以什么结尾)
print(len(s)) # 长度
print(s.count("南")) # 某个字符出现次数
print("abc" in s) # False(包含判断)
split 和 join 是一对好搭档——切分和拼接:
words = ["南山", "小站", "开张"]
print("-".join(words)) # 南山-小站-开张(join 是字符串的方法,别搞反)
print(" ".join(words)) # 南山 小站 开张
注意是 "分隔符".join(列表),不是 列表.join()——新手经常写反。
新手坑
坑 1:input 忘转换。所有 input 返回都是字符串,算数前先 int()/float()。
坑 2:f-string 里的大括号。想输出花括号本身要写两个:
print(f"{{你好}}") # {你好}
坑 3:join 方向搞反。"-".join(list),分隔符在左边。
小结
input()返回字符串,做运算前先类型转换,注意 ValueErrorprint(..., sep=..., end=...)控制分隔符和结尾- f-string 格式化:
{x:.2f}小数、{n:05d}补零、{m:,}千分位、{r:.1%}百分比 - 字符串常用:strip/lower/split/join/replace/count/in
- 新代码用 f-string,老代码的 % 和 format() 认得即可
练习
- 写一个程序:输入姓名和出生年份,输出”XX 今年 XX 岁”(用 f-string)
- 写一个程序:输入一句英文,统计里面有几个单词(提示:split)
- 思考:
f"{3.14159:.2f}"输出什么?f"{123456789:,}"呢?如果想把 3.14159 显示成 “003.14” 该怎么写?