Python基础入门:print输出与input输入完全指南,含格式化字符串实战

发布时间:2026/9/10 7:47:53
Python基础入门:print输出与input输入完全指南,含格式化字符串实战 1. 会说话之前先让Python跑起来很多朋友跟着教程学到第三课最容易出现的一种状态是前面变量、数据类型都看懂了一到写交互程序就蒙圈。其实这不怪你因为前两课学的都是Python怎么存东西从这一课开始才真正进入Python怎么和人沟通。所谓让你的程序会说话本质就是两件事程序能把结果讲给你听输出程序能听懂你给它的信息输入。这也是Python基础阶段最核心的分水岭跨过去之后你写的东西就不再是自己跑给自己看的计算器而是一个能和你对话的工具。动手之前先确认你的Python环境是好的。1.1 环境检查别让你的第一行代码卡在装环境上我见过太多学生卡在代码明明没问题就是跑不起来的坑里最后发现是环境的问题。这里给你一个三十秒自检流程Windows用户按Win R输入cmd回车在黑色窗口里敲python --version能显示版本号就说明装好了。如果提示不是内部或外部命令多半是安装时没勾选Add Python to PATH重装一遍勾上就行。Mac用户打开终端Terminal输入python3 --version能显示版本号即可。Mac自带的Python版本通常比较老建议去官网装最新的3.x版本装完一定要记得用python3而不是python来启动。装完之后我建议你顺手装一个像样的编辑器。IDLE虽然自带但写稍微长一点的代码就很痛苦VS Code免费、插件生态好是绝大多数Python初学者的首选。别在编辑器选择上纠结太久能写代码、能运行就够了。1.2 交互式命令行与脚本文件两种说话方式环境就绪后你会遇到两种运行Python的方式理解它们的区别对后续学习很重要。第一种是交互式命令行就是你在终端里输入python或python3后看到的提示符。在这个模式下你敲一行代码它立刻执行一行就像面对面聊天——你说一句对方回一句。适合验证小想法、查函数用法。第二种是脚本文件把代码写进一个.py文件里然后用python 文件名.py一次性运行整个文件。这更像是在台上念一篇演讲稿所有内容提前写好运行后一口气全部执行完毕。我的建议很直接从第三课开始凡是超过三行的代码一律写成脚本文件。原因很简单——交互式命令行没法保存你的工作关掉窗口就什么都没了而且程序会说话往往涉及多次输入输出用脚本文件才能完整体验程序的运行流程。别偷懒这是你职业习惯养成的第一步。2. 程序的第一句话print() 输出的完整拆解让程序会说话最基础的方式就是print()。你可能在第一课就见过它但多数教程只教了把东西打印出来至于它内部那点门道往往一带而过。实际上print()的完整能力比你想象的大得多。2.1 print() 的三件小事sep、end 与转义字符先看最普通的用法print(你好Python) print(今天天气不错)输出两行文字代码本身没什么好讲的。但print()其实还藏着两个不常被注意的参数sep和end。sep控制的是多个值之间的分隔符默认是空格。看这个例子print(我叫, 张三, 今年, 18) # 输出我叫 张三 今年 18如果你希望输出更自然的中文句子可以把分隔符改掉print(我叫, 张三, 今年, 18, sep) # 输出我叫张三今年18end控制的是打印完这行之后末尾追加什么默认是换行符\n。这就是为什么你连续写两行print()输出会自动换行。如果你不想换行可以这样print(正在加载, end) print(...完成) # 输出正在加载...完成这两个参数在你后面做日志输出、进度提示的时候非常有用现在先混个脸熟。再说转义字符。字符串里有些特殊符号没法直接打出来比如换行、制表符按Tab的效果、引号本身。Python 用反斜杠\开头的一组字符来表示它们print(第一行\n第二行) # 输出 # 第一行 # 第二行 print(列1\t列2\t列3) # 输出列1 列2 列3 print(他说\你好\) # 输出他说你好\n是换行\t是制表符\是转义后的双引号。记住这三个就够应付绝大多数场景了。还有一个小技巧如果你想原样输出反斜杠本身要写\\不然Python会以为你在写转义字符。2.2 把散落的信息拼成一句话从加号到格式化输出新手写输出最容易踩的一个坎是怎么把变量和文字拼在一起最直觉的做法是拿加号拼接字符串name 李四 print(你好 name) # 输出你好李四这种做法在变量少的时候没问题但一遇到数字就翻车age 18 print(我今年 age 岁) # 报错TypeError: can only concatenate str (not int) to str原因后面会细讲这里你只需要知道字符串和数字用拼接是不行的。那怎么办最简单的过渡方案是用逗号print(我今年, age, 岁)逗号会自动在每项之间加空格虽然不是最优雅的方案但至少不会报错。真正优雅的方案是格式化输出这是第四大节的重点我先把问题摆出来你带着为什么需要用格式化这个问题往下看会理解得更透。3. 让程序听懂你的话input() 用户输入光会输出程序还是个单向广播喇叭。真正会说话的程序得能听——这就是input()函数的用武之地。3.1 input() 的基本逻辑与返回类型input()的用法非常简单name input(请输入你的名字) print(你好 name)运行到input()这一行时程序会暂停在屏幕上显示括号里的提示文字然后等待你从键盘输入内容直到你按下回车键输入的内容才会被赋值给变量name程序继续向下执行。这里有几个关键点要刻在脑子里第一程序是卡住的。新手经常疑惑为什么运行之后什么反应都没有其实程序正在等你输入只是光标在闪而已。你把内容打进去、按回车一切就继续了。第二input()返回的一定是字符串。不管你输入的是数字、字母还是中文程序拿到手的一律是字符串类型。这一点极其重要无数报错都源于此下一节详聊。第三提示文字是可选参数。你可以写input()不带任何提示程序会静默等待输入但用户体验很差——用户根本不知道程序想要什么。实际开发中建议永远带上清晰的提示语。3.2 字符串到数字的翻译类型转换到底在转什么现在到了本课第一个重雷区。你输入年龄然后想让程序告诉你明年多大age input(请输入你的年龄) print(明年你 age 1 岁)你期盼输出明年你19岁但程序直接给你一个TypeError。问题就出在input()返回的age是字符串18不是数字18。字符串做不了数学运算加号在这里变成了拼接操作而字符串和数字之间又没法拼接于是报错。解决的办法是类型转换——把字符串翻译成数字age input(请输入你的年龄) age int(age) # 把字符串18转成整数18 print(明年你 str(age 1) 岁)注意两点int()能把纯数字字符串转成整数。如果你输入abc程序会报ValueError因为abc根本翻译不了成数字。算完之后想拼接回字符串还得用str()把数字再转回字符串。这个来回转换看着麻烦但这是Python保证数据严谨性的一种方式——类型不匹配就不能瞎算杜绝了很多隐蔽错误。除了int()常用的还有float()用于转小数。比如统计体重、价格这类数据用float(input(...))就行。给你一个判断公式凡是来自input()的数据默认全是字符串凡是要参与数学运算的字符串必须先转成数字。把这个公式刻在脑子里你能避开接下来半年至少一半的报错。4. 对话的质感三种字符串格式化方式怎么选前两节我们已经能实现程序输出 用户输入的基本对话了但输出的句子还是有点粗糙。假设你要给用户生成一段自我介绍name 王五 age 25 city 上海用加号拼接的话你得写print(我叫 name 今年 str(age) 岁来自 city 。)能跑但极其啰嗦而且str()来回转换非常容易漏。这时候就需要字符串格式化出场了。Python 历史上出现过三种主流方案我把它们放在一起对比。4.1 %格式化与format()老前辈的看家本领最早期的方案是%格式化灵感来自C语言的printfprint(我叫%s今年%d岁来自%s。 % (name, age, city))%s表示这里要放一个字符串%d表示放一个整数%f表示放一个浮点数。后面用%加一个元组按顺序把变量填进去。这套语法在老代码里非常常见你需要能看懂但新项目里已经很少有人用了。后来Python推出了format()方法用花括号{}做占位符比%直观得多print(我叫{}今年{}岁来自{}。.format(name, age, city))花括号会自动按顺序接收format()里的参数。还可以指定位置print(我叫{0}来自{2}今年{1}岁。.format(name, age, city))format()比%强在可读性高支持的关键字参数和格式控制也更丰富。但它的写法还是偏繁琐每个占位符都要和后面的参数一一对应。4.2 f-string当代Python写对话的首选Python 3.6 引入了f-string彻底改变了字符串格式化的体验。用法是在字符串前面加一个f然后用花括号直接嵌入变量甚至表达式print(f我叫{name}今年{age}岁来自{city}。)不需要额外调用函数不需要参数对应直接在花括号里写变量名就行。更爽的是花括号里能直接放表达式print(f明年我就{age 1}岁了。) pi 3.1415926 print(f圆周率保留两位小数{pi:.2f}) # 输出圆周率保留两位小数3.14{age 1}会先计算出结果再填入字符串{pi:.2f}是格式控制语法意思是保留两位小数显示。这种所见即所得的体验是前两种方案完全比不上的。4.3 实际项目中的选择标准我把三种方式整理成一张表方便你对照方式语法示例可读性性能适用场景%格式化%s %d % (a, b)低一般读懂老代码format(){} {}.format(a, b)中一般需要复杂格式控制的场景f-stringf{a} {b}高最优日常开发首选我的建议非常明确新写的代码90%的情况用 f-string。它可读性最好、性能最优、写起来最省心。但另外两种也得认识因为你迟早要维护别人写的老项目看到%s和.format()不至于懵。还有一个使用上的小提醒f-string 的花括号里是表达式能执行计算和函数调用但别放太复杂的逻辑进去。如果一段表达式超过两三层先算好再塞进花括号保持代码清爽。5. 综合实战做一个人机问答小脚本讲了这么多零散知识点我们来做一个综合小项目。目标写一个程序它会主动问你好几个问题然后根据你的回答生成一段完整的自我介绍。这个项目麻雀虽小但五脏俱全——输出输入、类型转换、格式化、简单逻辑全都有。5.1 需求拆解与代码实现先想清楚程序要做什么问用户叫什么名字问用户今年多大问用户住在哪个城市算出用户明年的年龄把这些信息整理成一段流畅的话输出对应的完整代码# 人机问答小脚本 print( 自我介绍生成器 ) # 开场标题 name input(你好请问你叫什么名字) age_text input(今年多大了) city input(你住在哪个城市) age int(age_text) # 字符串转整数 next_year_age age 1 print() print(好的我已经记住了) print(f你叫{name}今年{age}岁住在{city}。) print(f再过一年你就{next_year_age}岁啦) print(很高兴认识你 name ) print( 对话结束 )5.2 代码运行过程与逐段解读我们来模拟一次运行完整走一遍程序的生命周期 自我介绍生成器 你好请问你叫什么名字 ← 用户输入陈晨 今年多大了 ← 用户输入28 你住在哪个城市 ← 用户输入杭州 好的我已经记住了 你叫陈晨今年28岁住在杭州。 再过一年你就29岁啦 很高兴认识你陈晨 对话结束 逐段解读一下print( 自我介绍生成器 )是纯输出充当界面的标题让用户一眼知道这个程序是干嘛的。连续三个input()负责收集用户信息每收集一项就赋值给对应变量。注意第二个input()我用了age_text而不是直接叫age这是刻意为之——名字带_text是在提醒自己这还是个字符串不能直接算。age int(age_text)是关键的转换动作。没有这一行下面的age 1必然报错。接下来连续几个print()用 f-string 把变量嵌进句子。这里的print()空参数起到了输出一个空行的作用让界面段落分明可读性提升不少。最后一行很高兴认识你 name 用的还是加号拼接——这里没有数字参与拼接字符串是安全的两种方式混用正好让你看到它们的边界。5.3 三个方向扩展这个小程序这个小脚本只用了大约十行代码但你已经可以往三个方向扩展每个方向都通向后面要学的正经知识点方向一加循环让程序持续对话。用while True包住主逻辑每次对话结束后问一句还要再来一次吗输入y就重新开始输入n就退出。这是走向所有真实交互程序的必经之路。方向二加条件判断让程序因人而异。比如判断age 18就输出你是成年人了否则输出你还小呢。这就自然过渡到了if语句——Python基础第四课的内容。方向三把结果存进文件。用with open(info.txt, w, encodingutf-8) as f:加f.write(...)把生成的自我介绍保存下来。学会之后你的程序就能记住用户了。每个方向都建议你亲手试一遍。编程是手艺活看十遍不如敲一遍。6. 新手最容易踩的四个坑与完整排查过程最后这部分我整理了这些年带新手过程中出现频率最高的四个报错。每个坑都按现象 → 原因 → 解决的顺序呈现你踩到的时候直接对照排查即可。6.1 坑一input() 拿回来的数字不能直接算现象age input(年龄) print(age 1)报错TypeError: can only concatenate str (not int) to str。原因input()返回的是字符串字符串用是拼接操作而数字 1 不是字符串没法拼接。很多新手看到concatenate这个单词直接懵住其实翻译过来就是拼接——你把一个字符串和一个整数硬拼在一起了。解决在参与运算前做类型转换age int(input(年龄)) print(age 1)这里直接在input()外面套int()一步到位。我个人的习惯是分两行写先age_text input(...)再age int(age_text)排查问题的时候更清楚数据在哪一步变了类型。6.2 坑二print() 里混用字符串和数字的类型错误现象score 95 print(你的分数是 score 分)报错TypeError和上面类似。原因同样是字符串和数字不能直接拼接。区别在于这次不是input()的锅而是你自己定义的数字变量。新手经常在拼接和计算两种意图之间切换时忘了类型。解决最省事的办法是直接上 f-stringscore 95 print(f你的分数是{score}分)花括号会自动把数字转成字符串显示不需要手动调str()。这也是我强烈推荐 f-string 的原因之一——它在底层已经处理好了类型转换的细节。6.3 坑三中文乱码与编码问题现象运行含中文的程序输出的中文变成乱码或者在老版本编辑器里直接报错。原因文件保存的编码格式和Python解析时使用的编码格式不一致。Python 3 默认源文件编码是 UTF-8绝大多数现代编辑器默认保存也是 UTF-8所以正常情况下不会出问题。但如果你用过一些老旧的Windows编辑器比如某些默认ANSI编码的记事本风格工具就可能踩坑。解决第一步确保文件保存时选择 UTF-8 编码第二步如果用 VS Code右下角可以看到当前文件编码点开改成 UTF-8 即可。另外在 Windows 命令行里跑 Python 程序如果输出中文乱码可以先执行chcp 65001把终端代码页切成 UTF-8。最稳妥的做法还是直接换一个现代化的编辑器别在环境问题上内耗。6.4 坑四print() 默认换行带来的输出格式问题现象print(请输入你的选择) print(1. 开始游戏) print(2. 读取存档)你明明想在同一行显示请输入你的选择然后让用户紧跟其后输入但实际输出却是请输入你的选择 1. 开始游戏 2. 读取存档原因print()默认end\n每次打印完都强制换行。当你在终端里运行程序时input()的提示语和print()的输出在视觉上会错位。解决用end参数控制。想让提示语后面不换行等用户直接输入可以这样print(请输入你的选择, end) num input()或者更常见的做法直接把提示语写进input()里——这也是我推荐的做法因为它语义上更清楚num input(请输入你的选择)顺带提一个相关的小坑input()只接受单行输入你按回车就代表输入结束。如果你需要在同一个问题里接收多行内容比如输入一段话后面学到循环之后再来处理现阶段不用纠结。这四个坑覆盖了新手阶段大约七成以上的报错场景。我的经验是遇到TypeError先检查类型遇到乱码先检查编码遇到格式不对先检查end和sep三分钟之内基本能定位。第三课的核心就是把print()和input()这一对说与听练扎实后面的文件操作、网络请求、图形界面本质上都是这两件事在不同场景下的延伸。你把这个地基打牢了接下来学什么都会顺很多。