ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python入门教程:掌握输入输出、内置函数与注释,写出交互程序

Python入门教程:掌握输入输出、内置函数与注释,写出交互程序 1. 动手前先搞定环境再认识第一个内置函数 print()学 Python 的第一天大部分人不是被语法难倒的而是被“环境”和“print”这两件事绊住过。今天这篇就是 Python 基础教程的第 1 篇主题锁定在输入输出、常用内置函数和注释。换句话说学完这一篇你就能写出一个“能问用户问题、能拿到回答、能拼出结果”的小程序这些能力是后面写爬虫、做数据分析、写自动化脚本的地基。我见过太多人一开始就纠结“学 Python 还是学 Java”“要不要先学数据结构”其实完全没必要。Python 入门最正确的姿势就是先跑通“输入 → 处理 → 输出”这个最原始的循环。输入靠 input()输出靠 print()中间处理靠各种内置函数注释则帮你把每一步的思路固化下来。这三件事吃透了后面你学 any 框架、any 库都会快很多。1.1 环境快速就绪别在装 Python 这一步劝退自己官网下载安装包是最稳的搜索“python 官网”直接进 python.orgDownloads 页面会默认推荐你系统对应的最新稳定版。这里有个容易踩的坑Windows 用户安装时一定要勾选“Add Python to PATH”否则你打开命令行敲 python 会提示“不是内部或外部命令”。macOS 用户要注意系统自带的 python3 可能版本比较老建议从官网装新版装好之后用 python3 --version 验证。Linux 用户一般自带 Python 3但如果你要用 pip 装第三方库记得先确认 pip3 是否存在。装完之后先在终端/命令行里敲 python 进入交互模式能看到类似 Python 3.12.x 的提示符就说明环境通了。我建议你顺手把 VS Code 也装上再装一个官方 Python 扩展这样写代码有语法高亮和代码补全新手阶段能少敲错一半单词。编辑器不是必需品但对初学者来说体验差别非常大。注意交互模式 提示符适合做小实验但写正式脚本还是要用 .py 文件。把代码存成文件跑你才能体会到“修改 → 运行 → 看结果”的高效循环也没那么容易丢失代码。1.2 print() 比你想象的更有料print() 是绝大多数人写的第一行代码但大多数人只用了它 10% 的能力。print() 是 Python 的内置函数内置函数的意思是不用 import 任何库就能直接用它们是 Python 解释器自带的“工具箱”。print() 能做的事包括输出一个或多个对象、自定义分隔符、自定义结束符、重定向输出到文件。先看最基础的用法print(你好Python) print(100) print(3.14) print(True)print() 可以接收任意数量的参数默认用空格分隔这些参数输出完自动换行。这个“默认用空格、默认换行”是靠两个隐藏参数实现的sep 和 end。很多人在第 1 篇就忽略了它们其实这两个参数特别常用。print(2025, 08, 18, sep-) # 输出2025-08-18 print(Loading, end ) print(done) # 输出Loading done注意不是两行手动把 end 设置成空字符串就可以实现“不换行的连续输出”。比如写循环打印进度时你会用到 end\r 让光标回到行首做出动态刷新的效果。还有 print 的 flush 参数默认是 False意思是缓冲区满了或者程序结束才真正把内容吐到屏幕上。如果你在写一个实时日志、进度百分比之类的程序记得加上 flushTrue否则输出会“卡”在那里不显示。再补充一个细节print() 输出多个对象时的分隔符。把列表展开输出是常见操作比如scores [89, 96, 58, 100] print(*scores, sep, ) # 输出89, 96, 58, 100星号在这里是“解包”相当于把列表元素一个个摊开传进去。这个技巧你后面写调试代码时会经常用很多新手不知道 * 能这样玩半天找不着 sep 的用法。2. input() 输入函数让你的程序开始“听得懂人话”只输出不输入程序就是个复读机。加上 input()程序才算有了交互能力。input() 会把用户在终端里敲入的内容作为字符串返回注意是字符串不管用户敲的是数字还是字母。这个问题初学者的报错现场十有八九都跟它有关。2.1 input() 的工作机制与两个坑input() 执行时程序会在这里暂停等待用户敲击回车。你给它的参数是一段提示文本会原样显示在屏幕上name input(请输你的名字) print(你好 name)第一个坑input() 返回的一定是字符串。用户输入 18你拿到的是字符串 18不是整数 18。后面做年龄 1 运算直接报 TypeError。第二个坑用户可能直接敲回车得到空字符串。如果不做处理很多逻辑会出错。我自己的习惯是拿到输入后立刻 .strip() 去空格再判断是否为空name input(请输你的名字).strip() if not name: name 匿名用户会阻塞、会等待、拿回的是字符串——这三个特点必须刻在脑子里。因为你在写爬虫时input 经常被用来“暂停程序等人工操作”比如等用户登录完再继续爬。理解了阻塞特性你就明白这个小技巧的原理了。2.2 类型转换int()、float()、str() 与三种场景既然 input() 返回字符串那要做数字运算就必须转换类型。内置函数 int() 能把数字字符串转成整数float() 转成浮点数str() 把任何对象转成字符串。什么时候必须转我用一个计算 BMI 的例子说明height float(input(请输入身高米)) weight float(input(请输入体重公斤)) bmi weight / (height ** 2) print(你的BMI是 str(round(bmi, 2)))这里有三处类型转换身高体重转 float是为了做除法bmi 算出来是浮点数要用 str() 转成字符串才能和前面的文本拼接。round(bmi, 2) 是内置函数把浮点数保留两位小数。一个常见报错是 int(3.14)会直接 ValueError因为 int() 不接受带小数点的字符串。遇到“用户输入 12.5 岁”这种数据你要么用 float()要么先 int(float(x))。另外int() 还能做进制转换int(ff, 16) 结果是 255这个进阶用法了解即可。有一点必须强调不要在 print 里不停套转换看得头晕。Python 3 以后字符串拼接可以用格式化输出替代后面第 3 章会详细对比。新手阶段先记住“数字运算必须转数值类型文本拼接必须转字符串”这条原则已经能避开 80% 的类型报错。3. 这些内置函数你迟早全会用到Python 内置函数有好几十个但初学者真正高频用到的其实就十几个。我按“探索型”和“计算型”两类来梳理每个都给了“什么时候用”的场景说明。3.1 探索型四个dir()、help()、type()、id()学编程最笨但最有效的方法就是把对象“扒开看”。dir() 返回对象的所有属性和方法列表help() 调出官方文档type() 告诉你对象类型id() 给你对象在内存中的地址。name python print(type(name)) # class str print(dir(name)) # 一堆字符串方法 print(help(name.upper)) # 解释 upper 方法 print(id(name)) # 一串数字这四个函数是自学的核心武器。碰到不熟悉的对象先 type() 认清类型再 dir() 看它有什么能力不明白的方法用 help() 查文档。我把这个组合拳叫“对象三连”比搜索引擎快得多因为这是从源头找答案。id() 的进阶用途是判断变量是否指向同一个对象。比如两个变量赋值相同的小整数Python 为了优化性能会复用对象id 一样赋值大的字符串id 就不一样。这个现象背后是“对象引用”的概念将来学可变/不可变类型、列表复制深浅时id() 是验证结论的利器。3.2 计算型六个len()、sum()、max()、min()、abs()、round()len() 统计长度注意它统计的是“元素个数”还是“字符个数”要看对象类型。字符串、列表、元组、字典、集合都能用 len()但对字典它返回的是键的个数这个细节容易记混。sum() 求和max()/min() 取最值它们都要求序列里的元素能比较大小。混入字符串和数字的列表用 max() 会直接 TypeError。abs() 求绝对值round() 四舍五入保留小数位。round() 有个著名“坑”round(2.675, 2) 结果是 2.67不是你以为的 2.68。原因是浮点数在计算机里的二进制存储有精度误差2.675 实际存储成 2.6749999999999998。如果你做金融计算、金额计算不要用 round()应该用 decimal 模块。做科学计算要精确舍入可以看 decimal 的 ROUND_HALF_UP。新手知道这个坑存在就够了详情留到后面讲浮点数精度的章节。用这几个函数组合起来可以玩一个小功能统计一组成绩的加权情况、找最高分最低分、做数据清洗。它们虽然简单却是以后用 pandas 做数据分析前最朴素的“手工工具”。3.3 格式化输出三兄弟%格式化、format()、f-string说到输出就绕不开字符串格式化。老前辈写代码喜欢用 %中间一代爱用 format()现在的主流推荐是 f-string。直接上对比表格方式写法示例适用场景%格式化我的名字是 %s今年 %d 岁 % (name, age)维护老代码、日志系统仍常见str.format(){} 和 {}.format(a, b)需要重复使用模板、动态传参f-stringf{name} 今年 {age} 岁日常最推荐代码最简洁name 小明 age 18 height 1.75 # 老式写法 print(我叫%s今年%d岁 % (name, age)) # format写法 print(我叫{}今年{}岁.format(name, age)) # f-string写法推荐 print(f我叫{name}今年{age}岁身高{height:.2f}米)f-string 的核心优势是“直接在字符串里写变量”前面加个 f 就行。花括号内部能写简单表达式比如 {age 1} 能算{height:.2f} 表示保留两位小数。做表格对齐可以用 f{姓名:10}{分数:5}左对齐右对齐一目了然。性能方面 f-string 也更快它在编译期就把表达式嵌入不需要像 format() 那样解析模板串。有一个细节新手常犯f-string 里的花括号要转义时写成双花括号 {{}}比如 f大括号 {{ }} 表示字典 才不会报错。另外 f-string 里的表达式不要写太复杂超过三步运算的代码放进花括号读起来就痛苦了应该先算好再塞变量。4. 注释写给未来的自己和其他人很多初学者觉得注释是“写给老师看的”写完代码就不管了。工作之后你会明白注释是写给“六个月后的自己”看的。这六个月内你学了一堆新东西回过头看当时的代码就像看别人写的一样。没有注释就真的只能靠猜。4.1 单行注释、多行注释与快捷键Python 的单行注释用井号 #行内 # 后面的内容全部被解释器忽略# 这是单行注释 name python # 这也是注释用来解释这行代码多行注释有两种常见方式连续多行 #或者用三引号字符串单双引号都行。但严格说三引号包裹的是字符串字面量Python 解释器并不会把它当作“注释”它只是“被忽略的表达式”。这会造成一个隐藏 bug如果你在三引号注释里写了函数定义、变量赋值它们只是“没被保存”没问题但如果这个三引号字符串恰好在某些文档生成工具扫描范围内可能被当成 docstring引发预期外行为。所以我的建议是多行注释就老老实实连续用 #三引号留给 docstring用途分明。IDE 里注释的快捷键要顺手VS Code/IDLE 里按 Ctrl/ 可以快速注释/取消注释选中的多行。写代码时先写注释再写代码把思路用中文理顺翻译成 Python 反而很流畅。这个习惯叫“注释先行”刚开始会觉得慢坚持两周你会回来感谢它。4.2 文档字符串 docstring 与“好注释”的标准docstring 是写在函数、类、模块第一行的字符串用来描述“这个函数是干什么的、参数是什么、返回什么”。用 help() 调出来的文档其实就是 docstringdef calc_bmi(height, weight): 根据身高米和体重公斤计算BMI。 参数: height: 身高单位米float类型 weight: 体重单位公斤float类型 返回: floatBMI数值保留两位小数 bmi weight / (height ** 2) return round(bmi, 2)写到这里我顺手说一下“注释和 docstring 的区别”注释解释“为什么”docstring 描述“是什么和怎么用”。比如你写了一个很绕的排序算法代码行里的 # 写清楚“这里为什么倒序遍历”函数头上用 docstring 写清楚“这个函数接收什么参数返回什么结果”。好的代码读注释就能知道全貌不用一句一句啃。什么叫“好注释”的标准三个层次Why为什么这么做、What这段代码做了什么、How怎么做到的。最常见的是堆一堆 How比如# 循环遍历列表这纯粹是废话代码本身就是这么写的。真正值得写注释的是 Why为什么这里用字典不用列表为什么除数是 0 时要返回 None为什么数据要先排序再遍历这类信息代码无法表达才是注释存在的理由。我审查代码时的标准是一一对照“没有注释我能看懂吗注释是否解释了代码无法表达的信息”。文档级注释还有 Doxygen、Sphinx 风格在大型项目里会用到那是为自动化文档生成服务的以后写项目时再学不迟。入门阶段把每个函数写清楚 docstring足够你用很久。5. 综合案例做一个命令行版“个人名片生成器”理论讲再多不落地等于零。这里我带你完整做一个“命令行版个人名片生成器”把输入、输出、内置函数、注释全部用上。这个例子是刻意设计的麻雀虽小五脏俱全做完你会对整篇内容有整体感。5.1 需求拆解与流程设计功能描述让用户输入姓名、年龄、城市、爱好程序输出一张排版清晰的个人名片。延伸一点需求年龄要能判断是否成年身高输入后要能保留一位小数显示。先做流程设计不急着写代码收集用户输入姓名、年龄、城市、身高、爱好对年龄做类型转换并判断成年与否用 f-string 做格式化输出对齐卡片文字用注释说明关键逻辑这个流程本身就是编程思维输入 → 处理 → 输出。任何程序都可以拆成这三段大程序只是每一段内部更加复杂而已。你现在做的这个名片生成器已经是完整程序的骨架。5.2 完整代码与逐步讲解# 个人名片生成器 # 功能收集用户信息输出格式化名片 # 收集输入 name input(请输入姓名).strip() age_str input(请输入年龄).strip() city input(请输入城市).strip() height input(请输入身高厘米).strip() hobby input(请输入爱好).strip() # 类型转换年龄转整数身高转浮点数 age int(age_str) height_cm float(height) # 判断是否成年 # 注意Python 不支持 这种写法用 and if age 18: adult_status 成年 else: adult_status 未成年 # 输出名片 # 用 ─ 做分隔线分隔线长度按内容宽度算 print( * 40) print(f姓名{name}) print(f年龄{age}{adult_status}) print(f城市{city}) print(f身高{height_cm:.1f} 厘米) print(f爱好{hobby}) print( * 40)几个值得讲的设计点。第一所有 input 都加了 .strip()避免用户多敲空格导致内容错位。第二height 输入的是厘米想显示一位小数直接 {height_cm:.1f}f-string 的格式控制就派上用场了。第三print( * 40) 打印 40 个等号做分隔线这是字符串乘法Python 里特别优雅的小技巧。第四if-else 结构是我新引进的语法但逻辑很好懂满足条件走一个分支否则走另一个。运行效果类似请输入姓名小明 请输入年龄18 请输入城市杭州 请输入身高厘米175.5 请输入爱好篮球 姓名小明 年龄18成年 城市杭州 身高175.5 厘米 爱好篮球 到这里你已经能用 input 拿到外部数据用内置函数做类型转换和格式化用 print 输出规整结果再用注释解释关键思路——这就是一个真实程序的完整闭环。那些没学的库、框架、算法都是在这个闭环上不断叠加增强而已。5.3 尝试自己扩展的方向学编程的秘诀是“改造代码”。我给几个难度递进的扩展想法给名片加一个“是否显示全部信息”的选择输入 y/n 决定是否显示爱好字段这要用到 if-else 嵌套。让用户输入生日算出生肖这要取年份余数用列表映射生肖。输出支持文本文件保存把名片内容写到一个 .txt 文件里这要引入 open()、write()是下一篇文章的内容。我个人强烈建议你亲手把每个扩展都写一遍。写不出来很正常卡住了就翻前面的内容或者打印中间变量看数据流。编程没有“看会”这回事只有“写熟”。6. 初学者最常见的 8 个报错与排查清单你马上就会遇到报错而且会非常多。这很正常Python 的报错信息已经是编程语言里最友好的了。我整理了新手期最高频的 8 个报错帮你建立一个快速排查的清单。6.1 报错速查表报错信息关键词含义常见原因解决思路SyntaxError: invalid syntax语法错误括号没关、冒号漏了、引号不匹配看报错箭头指向的位置和上一行/当前行末尾IndentationError: expected an indented block缩进错误if/for/def 下一行没缩进Python 用缩进区分代码块通常按 4 个空格NameError: name xxx is not defined变量未定义拼写错了、变量没赋值、漏引号检查单词拼写确认赋值是否执行TypeError: can only concatenate str (not int)类型错误字符串和数字直接拼接数字用 str() 转换或用 f-stringValueError: invalid literal for int()转换失败int(abc) 这种非法转换检查 input 输入先 float() 或加判断IndexError: list index out of range索引越界取了不存在的列表下标检查 len()确认下标不超范围KeyError: xxx键不存在字典取键时键名写错用 dict.get(key, default) 防御性取值AttributeError: str object has no attribute xxx属性错误对象类型和你的假设不符先 type() 确认对象类型再调用方法看报错要抓两个位置一是错误类型单词TypeError、ValueError 这种它直接告诉你是哪类问题二是最后一行文字里靠近文件路径的部分那里通常标了具体行号和变量名。新手常见的错误是只看“一行红字”就慌了其实信息全在里面耐心读一遍能解决一半问题。6.2 怎么读懂 Python 的报错信息个人经验Python 报错从下往上读。最下面一行是整个报错的“结论”比如 NameError: name input is not defined。然后往上翻会看到类似 File main.py, line 3, in module 的信息这是出错的文件和行号。再往上有时会有代码片段和一个小箭头箭头指向的位置就是解释器认为出错的地方。上次我自己写一个列表操作报错了十分钟没看出来原来是中英文标点混用把中文逗号打进了列表。所以你会发现 Python 报错提示对这个情况不一定能给到精确位置因为它能正常解析分隔符只是最后发现字符串没闭合。遇到这种“怎么改都不对”的玄学报错先把当前行的中文输入法切掉重新敲一遍再看。还有一个逆向排查技巧不是看报错行本身而是往上看“最近一次成功的输出是什么”。如果打了一堆 print 调试信息最后一个正常打印的位置就是问题切入点的前端。把可疑变量 print 出来看实际值和预期值的差异比瞎猜快十倍。这也是为什么我强烈建议初学者“不要怕写 print 调试不要一上来就学断点工具”print 大法虽然原始但对理解数据流是最直观的。最后再分享一个我教课时的习惯写代码前先想三件事——输入是什么、输出是什么、中间要做几次转换。把这三句话写在注释里再动手写代码。我试过两种教学方式第一种是直接带着写代码第二种是先在注释里写思路再填代码后者的学习效果扎实得多。你用这个习惯写几段小脚本再回来读这篇文章体会会完全不同。
返回列表