1
2
3
4
5
6
7
作者:李晓辉

联系方式:

1. 微信:Lxh_Chat

2. 邮箱:939958092@qq.com
  1. Python 系列(一) 从零开始认识 Python,入门其实没那么难
  2. Python 系列(二) 学 Python 的第一步,把开发环境搭建好
  3. Python 系列(三) 基础语法避坑指南,缩进、大小写、续行与注释
  4. Python 系列(四) Python 输入输出详解,print()、input() 与常见避坑指南
  5. Python 系列(五) 数值类型与运算符详解,整除、浮点精度与进制转换实战
  6. Python 系列(六) 字符串处理实战,查找、替换、切片与日志分析
  7. Python 系列(七) 类型转换详解,int()、float()、str() 与金额计算避坑
  8. Python 系列(八) Python 流程控制入门,掌握 if、elif 和 else
  9. Python 系列(九) Python 逻辑运算符详解,and、or、not 一篇搞懂
  10. Python 系列(十) while、for 循环实战,彻底搞懂 range、break 与 continue
  11. Python 系列(十一) list、tuple、set、dict,到底该怎么选?
  12. Python 系列(十二) List 列表实战,搞定数据增删改查与批量处理
  13. Python 系列(十三) Tuple 元组实战,搞懂不可变特性与 enumerate() 遍历
  14. Python 系列(十四) Set 集合实战,搞定数据去重与集合运算
  15. Python 系列(十五) Dict 字典详解,掌握快速查找与键值操作
  16. Python 系列(十六) sort() 和 sorted() 详解,掌握数据排序技巧
  17. Python 系列(十七) 自定义函数入门,让重复代码一次编写多次使用
  18. Python 系列(十八) 函数参数详解,搞懂位置参数、关键字参数和默认参数
  19. Python 系列(十九) 从 *args 到 **kwargs,让函数调用更灵活
  20. Python 系列(二十) 变量作用域是什么?一文搞懂 global 和 nonlocal
  21. Python 系列(二十一) 搞懂变量、对象和引用,理解函数参数传递机制
  22. Python 系列(二十二) map() 和 filter() 详解,轻松实现批量数据处理与筛选
  23. Python 系列(二十三) 嵌套函数与 lambda 表达式详解,搞懂作用域与闭包
  24. Python 系列(二十四) 搞懂递归函数,从基线条件到实际应用
  25. Python 系列(二十五) 聊聊模块与 import,让代码告别重复编写
  26. Python 系列(二十六) Python 模块入门,从 import 到模块复用
  27. Python 系列(二十七) Python dir() 函数详解,快速查看模块中的函数与属性
  28. Python 系列(二十八) 不会用 Python 标准库?教你快速查找模块和函数
  29. Python 系列(二十九) 搞懂 Python sys 模块,让脚本更适合自动化运维
  30. Python 系列(三十) 为什么 0.1 + 0.2 不等于 0.3?彻底搞懂 Decimal
  31. Python 系列(三十一) 搞懂 datetime 日期时间,轻松处理时区与时间计算
  32. Python 系列(三十二) 面向对象编程入门,从零理解类、对象、封装与继承
  33. Python 系列(三十三) 什么是类和对象?零基础理解 Python class
  34. Python 系列(三十四) Python 属性详解,搞懂类属性、实例属性和 setter
  35. Python 系列(三十五) 学会特殊方法,让对象打印出你想要的内容
  36. Python 系列(三十六) 多个对象如何共享数据?彻底搞懂类变量
  37. Python 系列(三十七) 搞懂父类、子类和方法重写,真正理解继承与多态
  38. Python 系列(三十八) 如何判断数据类型?三个内置函数一次讲明白
  39. Python 系列(三十九) 搞懂异常模型与常见异常类型,读懂程序报错
  40. Python 系列(四十) 从零学会异常处理,掌握 try、except、else 和 finally
  41. Python 系列(四十一) ValueError、TypeError 到底是什么?一文搞懂常见异常
  42. Python 系列(四十二) ValueError、TypeError 到底是什么?一文搞懂常见异常

语法对了,程序才能跑起来;输入输出对了,程序才能和人、和系统对话。这一篇我们只讲两件事:怎么把信息打印出来,怎么从用户那里拿进来。看似基础,但在生产脚本里,print 的 sep 和 end 用错、input 返回永远是字符串这个特性没搞清,会导致无数低级 Bug。

上一篇我们搞定了大小写、缩进、续行和注释。从这一篇开始,我们进入 Python 的交互层,先把输出和输入的底层行为摸透。

简单输出:print 的默认行为

print() 能接受零个或多个参数,用逗号分隔。

1
print("Hello", 123, "Goodbye", 5 + 9)

运行结果:

1
Hello 123 Goodbye 14

默认行为是:

  • 多个参数时,每个参数之间用单个空格分隔
  • 最后一个参数后自动换行

很多人第一次用 print 时会疑惑,为什么参数之间会自动加空格。答案就是默认的 sep=" "。

可选参数:sep、end、file

默认行为可以改。

sep:参数之间的分隔符
end:最后一个参数之后显示的字符,默认是换行 \n
file:输出的目标文件,后面章节再讲

实战例子:

1
print("Hello", 123, "Goodbye", 5 + 9, sep=":", end="###")

运行结果:

1
Hello:123:Goodbye:14###

没有换行,末尾是 ###。在写日志或做简易进度条时,end 用来避免每次都换行很有用。

我老李在写运维脚本时常用 sep 把多字段拼成 key:value 的简易格式,方便后续用 split 解析。

简单输入:input 的三大特性

input() 提供运行时从键盘获取用户输入的机制。它有三个必须记住的特性:

  1. 接受可选的提示字符串作为参数
  2. 自动删除键盘输入中的换行符
  3. 始终返回字符串

提示字符串的用法

1
response = input("Please enter some text:")

运行:

1
Please enter some text: Hello

response 的值是 Hello。

如果提示里本身带换行:

1
response = input("Please enter some text:\n")

运行:

1
2
Please enter some text:
Goodbye

提示会先换行,再等待输入。

输入永远是字符串

这是新手最容易踩的坑。

1
2
response = input("Please enter a number: ")
print("The response of", response, "is of type", type(response))

输入 456 后运行结果:

1
2
Please enter a number: 456
The response of 456 is of type <class 'str'>

即使你输入的是数字,input() 也会把它当成字符串返回。后面需要把它转成 int 或 float 才能做数学运算,否则会直接报 TypeError。

再看一个组合例子:

1
2
response = input("Please enter some text:\n")
print("The last response is", response, sep=":")

运行:

1
2
3
Please enter some text:
Goodbye
The last response is:Goodbye

这里用 sep=":" 把两部分连成一行。

flowchart LR
    A[用户输入] --> B["input() 读取"]
    B --> C{返回类型?}
    C -->|始终| D[str 字符串]
    D --> E[需要时手动转换]
    E --> F[计算或处理]
    F --> G["print() 输出"]
    G --> H[屏幕/日志]

生产环境常见坑与建议

  • 忘记转换类型:input 返回字符串,直接 + 会拼接而不是相加。我建议在获取数值输入后立刻做 int() 或 float() 转换,并在转换时加 try/except 兜底。
  • 多参数输出乱序:print 忽略参数间的额外空格,靠 sep 控制分隔符比手动加空格更可靠。
  • 换行控制不当:写进度日志时用 end="" 或 end="\r",避免刷屏。
  • 提示不清晰:交互脚本的提示要写完整,包含单位和示例,减少用户输入错误。

小练习思路

前面我们用 print 输出了信息,用 input 拿到了输入。现在可以把它们连起来:

  1. 提示用户输入名字和姓氏
  2. 用 print 拼接成全名
  3. 再让用户输入年龄,打印出完整的个人信息

注意年龄需要先转成 int 才能判断是否合法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 提示输入名字和姓氏
first_name = input("请输入名字: ")
last_name = input("请输入姓氏: ")

# 2. 用 print 拼接成全名
full_name = f"{first_name} {last_name}"
print("全名:", full_name)

# 3. 输入年龄并转成 int
age_input = input("请输入年龄: ")
try:
age = int(age_input)
if age > 0 and age < 150:
print(f"个人信息 -> 姓名: {full_name}, 年龄: {age} 岁")
else:
print("年龄不合法,请输入 1~149 之间的数字")
except ValueError:
print("年龄必须是数字,请重新输入")
1
2
3
4
5
请输入名字: 晓辉
请输入姓氏: 李
全名: 晓辉 李
请输入年龄: 35
个人信息 -> 姓名: 晓辉 李, 年龄: 35 岁

写在最后

这一篇我们掌握了:

  • print() 的默认行为和 sep、end 参数
  • input() 始终返回字符串,并自动去掉换行
  • 输入输出的组合使用是交互式脚本的基础

把输出和输入的边界搞清楚,下一步才能安心地讲数值类型和字符串方法。