ARTICLE DETAIL

资讯详情

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

Python类型转换完全指南:从input()到int/float/str/bool的实战应用

Python类型转换完全指南:从input()到int/float/str/bool的实战应用 今天是这个系列的第七篇也是“15天零基础学Python”走到一周整的日子。如果你从第一天跟着这个节奏走现在已经见过了print、变量、数据类型、if判断、循环这些“老朋友”了如果你今天才点进来也别慌前面的知识我会在讲到的地方顺手带你补一下关键点。第7天这个节点很有意思前6天你做的事情基本是“看懂代码”但从今天开始你要写出能真正处理用户输入、能跑出有用结果的程序。而这一天的核心就是Python里一个绕不开的坎——类型转换。它同时也是很多人第一次写“交互式程序”时最容易卡住的地方。今天的文章会围绕一个完整的实操项目展开不要只盯着一个个函数看一定要跟着代码敲一遍。学完今天的内容你能理解input()读进来的为什么是字符串会灵活使用int()、float()、str()、bool()这几个转换函数还能顺手做一个小而完整的BMI健康计算程序。这些技能放到后面的函数、文件处理、爬虫实战里都是地基一样的东西。1. 第7天到底学什么类型转换一个绕不开的“绊脚石”1.1 为什么是第7天讲类型转换前6天你接触过的内容大概是print输出、变量与赋值、基本数据类型、字符串操作、if条件判断、for/while循环。看起来零零散散但所有的课都在为一件事情做准备让你能写“输入-处理-输出”这样一条完整链路。而一旦你开始写input()问题就来了。很多新手照着教材敲age input(请输入你的年龄) print(age 1)运行的一瞬间程序直接报错TypeError: can only concatenate str (not int) to str。这个报错的意思很直白age现在是一个字符串字符串不能跟整数做加法。你输入的是“18”可程序收下的却是“18”这几个字符而不是数字18。input()有一个天然的行为无论用户键盘上敲了什么它都会当作字符串返回。这是一个非常容易踩、但几乎每个零基础学员都会踩一脚的坑。所以说类型转换不是一个“高级技巧”而是从今天开始你写任何交互式程序都要面对的基本功。你总不能每次都让用户输入“一二三”然后自己手动用if去判断吧。1.2 今天的学习目标与资源搭配今天这篇文章不是一个孤立的教程它是配合网课学习的“笔记练习册”。你在B站搜索“黑马程序员”里面有一整套Python零基础入门视频你可以挑着看第7天对应的章节讲得很细适合通勤路上或者吃饭的时候倍速刷一下。但刷视频只是输入决定你学不学得会的是今天能不能独立把这里的代码敲出来把练习题写完。今天的目标可以拆成四条写下来贴在屏幕上学完对着自查能说出为什么input()返回字符串字符串与数字不能直接参与运算。会熟练使用int()、float()、str()、bool()四个转换函数。能写出一个带输入、运算、判断、输出四个环节的完整小程序。能看懂常见的类型相关报错信息知道去哪里排查。1.3 如果你前6天没跟怎么快速赶上今天的内容本质上是一个小综合牵扯到变量、if判断、运算符。如果前6天你只是草草看过没动手我建议你先把下面这几行代码自己在编辑器里运行一遍再看看每个结果是不是符合直觉print(type(123)) print(type(123)) print(type(123.45)) print(10 / 3) print(10 // 3) print(2 ** 3) print(3 2 and 1 2)type()可以返回一个数据的数据类型这个函数今天会频繁用到它也是你平时排错最好用的工具之一。这几行看得懂今天的内容就可以放心往下走。如果这几行都运行不了那先别急着学新知识回到第1、2天的内容把Python安装和环境配好再回来。2. 类型转换四个内置函数一次讲透类型转换其实不复杂你只需要记住一件事Python里有一个类型就有一类对应的转换函数。我们现在最常用的就是int()、float()、str()、bool()这四个。它们的名字和用途都很好记但细节上藏着很多坑。2.1 int()把字符串或浮点数转成整数int()最常见的用法是把数字字符串转成整数。比如num_str 123 num_int int(num_str) print(num_int 1) # 124这里int(123)返回的是真正的整数123所以能直接和1做加法输出124。这看起来平平无奇但它就是今天的主角因为你所有的input()数据都要靠它来“解封”。int()还可以把浮点数转成整数但这里有一个很重要的原则它不是四舍五入而是直接截断小数部分。比如print(int(12.7)) # 12 print(int(12.1)) # 12 print(int(-5.8)) # -5int(-5.8)的结果是-5很多人会意外。它做的事是“向0取整”也就是丢掉小数部分不是向下取整也不是四舍五入。如果你确实想要“四舍五入到整数”的效果得用round()函数。接下来是大坑预警int(12.5)会报错int(abc)也会报错。原因很简单——int()只认整数形式的字符串不认小数更不认字母。你以后如果写程序让用户输入价格用户敲了个“12.5”你直接int()就会把程序炸了。所以我给你的建议是什么时候用int()什么时候用float()取决于用户输入的数据长什么样。如果是年龄、人数、次数这种一定是整数的用int()如果是身高、体重、金额这种可能有小数点的用float()。2.2 float()处理小数和无理数的输入float()把字符串或数字转成浮点数也就是带小数的数。用法和int()几乎一样height float(1.75) print(height) # 1.75 print(height 0.1) # 1.85它的宽容度比int()高一些因为float(12)也可以得到12.0这点在预料之内。但要注意float也不认识“1,75”这种带逗号的写法也不认识“abc”。float()还有一个隐藏知识点它能识别科学计数法。比如float(1e3)结果是1000.0。这个平时用不到但万一你在网上看到别人代码里出现类似写法别慌就行。2.3 str()拼接时最常用的“急救工具”str()的用途是把任意对象变成字符串。你可能觉得它太简单但在print输出的时候它是绝对的主力。比如你写了一个程序计算BMI算出来的结果是个浮点数你想把结果和文字拼在一起输出如果不做转换就会触发“字符串不能和数字拼接”的报错。所以常规写法是bmi 22.5 print(你的BMI是 str(bmi))这里str(bmi)把22.5变成了22.5拼接就成功了。当然Python里还有一个更优雅的格式化写法比如f-stringprint(f你的BMI是{bmi})f-string在前6天如果没学到也不影响今天下午你就能在网课里看到它。我个人的习惯是输出内容简单就随手str()内容多就上f-string两者都要会因为读别人代码的时候两个都会遇到。2.4 bool()与隐式转换容易被忽略的坑bool()的规则一句话能说清空的东西是False有内容的东西是True。具体来说bool(0)是Falsebool(0.0)是Falsebool()是Falsebool([])是False其他大多数情况下都是True。这听起来很清晰但有一个坑你必须小心print(bool(0)) # True print(bool(False)) # True字符串0和字符串False都不是空字符串所以都会被转成True。这会不会影响日常写代码会。尤其是你在用input()接收用户输入又想用if去判断用户是不是输入了0或者False的时候如果不先做类型转换直接bool(input())得到的结果会完全出乎意料。还有个更隐蔽的坑叫“隐式类型转换”。Python里有些操作会自动完成转换不需要你手动写int()、float()。比如print(1 1.0) # 2.0 print(True 1) # 2第一个例子是整数和浮点数相加Python自动把1转成1.0得到2.0。第二个例子是布尔值和整数相加因为True本质上是1True1等于2。这种隐式转换在你写代码时偶尔会突然冒出来干扰你的判断尤其当你用type()去检查数据时会发现结果和你预期的不一样。了解它的存在比记住所有规则更重要。3. 第7天实操项目BMI计算器从0到1今天这一节请务必动手敲出来。视频课看到再多都不如自己完整地跑一个程序。3.1 项目需求与设计思路做一个BMI身体质量指数计算器它的输入输出逻辑非常清晰特别适合用来把前6天学到的知识串成一条线。需求是用户输入自己的身高米和体重千克程序计算BMI值并根据标准给出身体状态提示。BMI的公式不复杂体重除以身高的平方也就是weight / (height ** 2)。这个公式用到了运算符和幂运算正好复习一遍。设计上我刻意不写得太复杂只做一个控制台版本不搞图形界面。这个项目的核心不是做产品而是让你亲身体会一次“拿到用户输入、做类型转换、然后处理、然后输出”的完整流程。每一步都有对应的语法知识和容易出错的细节。3.2 逐步实现从接收输入到输出结果先理一下需要的变量height、weight都是input()得到的bmi是最终计算出来的浮点数。代码可以这样写height input(请输入身高米例如1.75) weight input(请输入体重千克例如65) height float(height) weight float(weight) bmi weight / (height ** 2) print(你的BMI是 str(round(bmi, 2))) if bmi 18.5: print(偏瘦) elif bmi 24: print(正常) elif bmi 28: print(偏胖) else: print(肥胖)我建议你把这整段代码自己敲出来不要复制粘贴因为只有亲手敲才能真正记住语法细节。这段代码里最关键的两行是height float(height)和weight float(weight)。没有这两行后面的除法运算就会直接报错。round(bmi, 2)是把BMI结果保留两位小数不影响计算精度只是输出更好看。运行一下输入身高1.75、体重65屏幕会显示BMI约为21.22状态是“正常”。看到这个输出你的第一个完整交互程序就跑通了。3.3 运行与测试故意输入非法数据会怎样一个程序能正常运行还远远不够真正的考验是“用户乱输入的时候程序会不会崩溃”。我让你做两个测试第一次在身高那一步输入“abc”然后回车。程序会直接抛出一行红字ValueError: could not convert string to float: abc。这个报错的意思是float()没办法把abc转成浮点数。这也是今天最常见的一个报错后面第五部分我会专门讲怎么处理。第二次身高输入“1.75”体重输入“63.2”程序正常运行。这说明只要用户按规矩输入程序就没有问题。但问题在于现实中用户不会按规矩输入总有人会输错。怎么让程序面对错误输入也不崩有两个方向一个是用isinstance()或字符串的isdigit()方法提前判断另一个是用异常处理try/except把错误“接住”。这两个知识点今天不做重点等你学到“异常处理”那一章自然就通透了。我今天只给你留一个印象类型转换是程序的第一个要塞它挡住了坏数据也暴露了坏数据。你后面会慢慢体会这句话。3.4 配套练习题安排光做BMI计算器还不够我按由易到难的顺序给你设计了5道题建议今天全部写完写一个程序让用户输入两个整数输出它们的和、差、积、商。写一个华氏温度转摄氏度的程序公式是C (F - 32) / 1.8输入华氏度输出摄氏度。写一个程序让用户输入一个两位数输出它的个位和十位之和。比如输入58输出13。写一个程序让用户输入一个数字判断它是正数、负数还是零并把结果用字符串拼接的方式输出。进阶题不会也正常让用户输入一个字符串判断它是不是一个合法的整数是则输出它的两倍不是则提示“输入不合法”。第5题如果你今天能做出来说明你已经把类型转换和if判断用得很熟练了。做不出来也不用急见过题目后面学到异常处理再回来解就行。4. 前6天知识点复盘与自查清单第7天是个节点不单单是讲新知识更要回头看一遍。很多人的问题是“学完第6天发现第1天讲的东西好像又忘了”。这种遗忘很正常补的办法不是重新看一遍视频而是做题、敲代码、看报错。4.1 六个核心知识点快速回忆我们快速过一下前6天应该留在脑子里的东西。第一天装好Python环境学会在命令行敲python进入交互模式第二天学print和变量赋值能用name 张三这样的语句存数据第三天学基本数据类型知道字符串、整数、浮点数、布尔值之间有什么区别第四天学会字符串的拼接和切片知道hello world的结果是什么第五天学if/elif/else条件分支能给程序“做决定”第六天学for和while循环能让程序“反复干活”。如果你看到这一段能在大脑里对每个知识点都浮现出一个具体的例子说明你基础很扎实。4.2 一张“能不能进入下周”的自查表网上很多教程给你规划学习路线但没人告诉你怎么检验。我建议你用下面这张表来核对每一条都能做到再往第8天走。检查项标准做法自测结果变量赋值能解释变量名为什么不能是数字开头通过 / 不熟类型判断说出type(1)、type(1)、type(1.0)分别是什么通过 / 不熟input处理方法知道input()返回字符串需要转换才能算数通过 / 不熟if分支结构能写清elif和else的执行顺序通过 / 不熟for循环遍历能按字符遍历字符串按元素遍历列表通过 / 不熟常见报错信息知道NameError、TypeError、SyntaxError大概是什么意思通过 / 不熟哪一项不过关就回到对应的天数补一补。特别是“input字符串”这一条今天后面所有的代码几乎都依赖这个认知。4.3 复盘时最容易忽略的细节复盘不是再看一遍视频而是做“回顾性输出”。我推荐一个方法拿出一张白纸靠记忆写出“用户输入两个数输出平均值”这个程序的完整代码。写不出来的地方标记一下然后回头翻之前的笔记和代码。这个方法能最快暴露你的知识盲区。另外复盘时可以顺手整理自己的“报错收集本”。把今天遇到的ValueError、TypeError、NameError都抄下来旁边写上解决办法。这个本子越厚你的水平涨得越快。我带了很多人学编程发现一个规律进步最快的学员不是脑子最聪明的而是最愿意记录和整理错误的那批。5. 第7天常见报错与排查技巧今天代码量一多报错就会密集出现。下面这几个报错是这个阶段最典型的我按“报错信息-原因-解决办法”的格式给你列出来。5.1 ValueError字符串转整数或浮点数失败报错示例ValueError: invalid literal for int() with base 10: abc ValueError: could not convert string to float: 12.5.3原因就是int()或float()拿到了它不认识的字符串。今天你大概率会在BMI计算器里遇到这个错误尤其是用户输入了“abc”或者“1.75米”这种带单位的内容。解决办法有两个方向一是设计阶段就做好引导让用户知道该输入什么比如在input()的提示语里写清楚“请输入数字”二是在代码里加入判断比如用字符串的isdigit()方法或者try/except把异常接住。今天先了解就可以不用强迫自己马上会写异常处理但必须读懂“ValueError是因为类型转换失败”这个事实。5.2 TypeError字符串和数字不能直接拼接报错示例TypeError: can only concatenate str (not int) to str原因就是print里面写成了“你的分数是” score而score是整数。解决办法是把数字转成字符串再拼也就是str(score)。这个报错今天会非常频繁每次遇到都可以默念一句话字符串和数字是两种东西非要放一起就手动转换。5.3 环境配置问题python命令找不到怎么办前面6天如果已经顺利运行过代码这部分可以直接跳过。但如果你今天才临时装环境报错可能不是代码造成的而是环境本身没配好。最常见的情况是Windows命令行输入python没有反应或者提示“不是内部或外部命令”。这通常是安装Python时没有勾选“Add Python to PATH”。解决办法是把Python卸载重装安装第一步一定要勾上这个选项。用vscode的话装一个Python扩展再确保右下角选择的解释器是系统里对应的Python版本。如果你用的是Linux系统命令行里一般默认是python3而不是python。这不算错误只是命令名不同。你可以先运行python3 –version看看有没有输出。还有一点务必注意不要在Linux里乱动系统自带的Python环境系统很多工具都依赖它装额外的Python版本请参考官方文档或虚拟环境方案这些是后话今天知道有这个坑就够了。5.4 查错思路从报错信息读出一个故事排查报错有一个通用流程今天先建立这个意识。拿到报错先看最下面一行那里有错误类型和简短描述然后往上找会看到类似File demo.py, line 5这样的行号信息它告诉你出错的位置在哪一行。你只要顺着这个信息去看那行代码大部分问题当场就能定位。这个过程不需要背任何东西只要学会“读报错”你的独立解决问题的能力就能上一个台阶。6. 第7天之后学习节奏与个人建议每次写到第7天这个位置我都想多说几句关于学习节奏的话。很多人觉得“15天零基础学Python”是夸张宣传我自己倒觉得15天可以入门但前提是你得真的每天碰键盘。第7天正好是第一个分水岭。6.1 为什么前7天最容易放弃前7天学的内容说白了是“语法零件”不直观也不好玩。你写出来的程序只能输出几行文字没有图形没有游戏没有网站自然觉得枯燥。这是成年人学编程最常见的瓶颈不是知识学不会而是短期内看不到成果于是不想继续。解决这个问题的唯一办法是“强行制造反馈”。今天这个BMI计算器就是反馈因为你能输入自己的身高体重看到一个真实的计算结果。哪怕是这么小的程序也比在笔记里背print的语法有趣得多。接下来的第8天到第10天你会学到函数和文件读写那时可以做真正的“记账本”“待办清单”。到时候你写程序的手感就完全不一样了。6.2 后续8天怎么安排才更稳我给这个系列定的节奏是第8天到第10天学函数和模块第11天到第12天学文件读写和异常处理第13天到第14天学面向对象第15天做一个综合小项目收尾。你如果时间紧张建议优先保证每天至少写30分钟代码。宁可一天只写30分钟也不要攒到周末一口气坐4个小时因为集中补课的效果远不如每天保持手感。还有一个小建议从今天开始尝试在写完代码后自己先“猜运行结果”再按运行按钮。听起来很简单但大多数人都没有这个习惯。比如int(3.9)结果是多少bool(False)结果是多少先猜再看结果。这种“预测-验证”的循环是自学编程最有效的训练方式之一。如果你今天已经把代码敲完、练习题写完那我的建议是别急着继续熬夜看视频去把前6天的笔记翻出来挑一个你觉得最迷糊的知识点再看一遍然后去睡个好觉。明天第8天咱们开始和函数打交道。
返回列表