尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python input函数:你输入的数字根本不是数字

Python input函数:你输入的数字根本不是数字 你引导用户进行年龄的输入操作, 随后用户诚实地敲击键盘填写了数字十八, 当你把接收到的数据进行加一运算以推算下一年度的年龄时, 整个程序系统直接触发了错误警告。你盯着屏幕在思考, 难道18不是数字吗, 然后再加上一个1会有什么问题的存在。可能颠覆你认知的一点在于其实你在输入框里头输入的这十八个字节的东西, 压根就不被机器认为是所谓的数学上的数, 它在系统眼里头仅仅只是一串普通的字符。这篇文章会对 input() 这一个函数进行深入剖析, 把相关细节全部挖掘出来, 从而让你能够彻底理解这个被称为“伪装大师”的函数, 它究竟是通过何种方式来实现其实际运行效果的。一、input() 和 print() 是一对反义词在前期的时候, 大家学习了print()这个内容, 它的主要功能是进行输出操作, 也就是把那部分指定的内容显示到屏幕上面去。input()函数的作用正好与输出相反, 它就是用来输入数据的, 具体表现就是让计算机停下来等待用户从键盘上敲入字符。它的语法格式是和 print() 一样的, 后面紧随着的就是圆括号。# 输出把内容打印出来print(请输入你的年龄)# 输入等待用户敲键盘input()在运行了 input() 这个步骤以后, 程序会直接卡在那里不动弹, 屏幕上那个光标一直在控制台的位置上闪烁个不停, 非得等着用户那边输入了一些内容才行, 等到用户把字都敲完了, 再按下回车键这一瞬间, 整个程序才会继续往下执行原来的流程, 开始进行后续的任务。刚入手的人经常会有搞不清楚的地方, 就是程序跑起来了一看, 竟然找不着闪烁的光标跑到哪儿去了?当你用鼠标在控制台区域轻轻点击一次的时候, 屏幕上的光标位置就会立刻发生变化并显示出来, 这个时候虽然程序主体部分已经结束运行了, 但是整个任务并没有彻底终止, 它实际上正处于一种等待状态, 专门在等着你来输入数据。二、通过使用变量来接收从 input() 函数那里得到的返回值。仅仅让用户进行输入操作是完全不够的, 你还必须要能够将用户输入的那些数据准确地接住并记录下来。那么具体应该如何去实现这个功能呢? 解决办法就是使用变量来接收这些输入的内容:print(请输入你的年龄)age input()print(f你今年的年龄是{age})运行效果请输入你的年龄18 ← 用户输入你今年的年龄是18当 input() 这个函数执行完毕以后, 它会返回一个值, 这个值实际上就是用户所输入的内容, 我们使用变量 age 去把这个值接过来, 这样在后面就可以进行使用了。三、最大的坑是, input这个函数的返回值始终都是字符串类型, 这一点非常关键且容易造成误解。这是整篇文章最关键的一句话, 我把这一句话加粗了三遍。不管你输入的是数字类型、还是小数类型、又或者字母组合, 通过input()函数所返回出来的内容, 一律都是属于字符串这一种数据形态的。你不相信吗? 可以用 type() 这个函数来试试看:strongcodeage input(请输入你的年龄)/code/strongprint(type(age))请开始执行程序, 然后键入数字18, 随后按下回车键确认。你输入的内容严格来说是数字18, 然而系统反馈的信息却是显示它为str, 并且指明了这是字符串的类型。这就如同你去银行里存款, 把手里的100元现钞交给柜员保管, 而柜员在你的存折上面记录下“壹佰元整”这样的字样——你所持有的资金本身并没有发生变化, 真实的金额依然存在, 只不过其具体的表现形式或者说记录格式发生了转变。四、请问, 那个叫做 input 的函数, 它为什么要被设计成现在这种样子的样子呢?许多人认为这是一种多此一举的行为, 因为用户输入了一个数字, 系统直接返回这个数字即可, 为什么非要将其转换为字符串的形式呢?设想这样一个具体场景, 用户不小心手滑输入了内容3.14abc, 此时系统需要问: 应当把它转换成什么样的数据格式或者归类为什么性质?因此, 其设计的基本思路是将关于数据类型的选择权力完全交付给应用程序开发人员进行掌控, 而我仅仅承担接收你所录入内容的职责, 也就是保持字符串形式的原貌不动, 倘若你希望获得某种特定类型的数据, 则必须依靠自身来完成相应的转换操作。要是从好听的那个方面来讲呢, 这就叫做尊重程序员自己的权利和自由但是如果说得直白一点的话, 其实它的真实含义就是我们真的不想为你将来可能出现的错误去承担那些责任。五、当进行字符串相加操作时, 结果是直接出现了失败的情况。既然明白了那个 input 函数会返回一个字符串, 那么接下来再去看看这个报错信息, 自然就能够理解其中的意思了。strongcodeage input(请输入你的年龄)/code/strongprint(f你明年的年龄是{age 1})运行输入 18回车strongcodeTypeError: can only concatenate str (not int) to str/code/strong翻译成人话字符串只能和字符串拼接不能和数字相加。age 这个变量是字符串, 它的具体内容是18 , 然后呢 , 你让这个东西去加上一个数字 1 , 这么做出来的结果是什么意思呀 , 它表示的意思就是: 这种活计 , 我是干不了的。六、关于解决方案, 这里说的是进行手动的类型转换。既然 input() 给的是字符串那就自己转strongcodeage input(请输入你的年龄)/code/strongage int(age) # 字符串 → 整数age 现在是数字 18print(f你明年的年龄是{age 1})执行操作以后, 往里面填写数字18。strongcode你明年的年龄是19/code/strong操作完成。int函数把字符串“18”转换成了整数18, 之后age加上1就能进行正常的计算了。关键的逻辑就是利用int这个函数对age进行类型的转换。在进行转换操作之后会新生成一个数值, 原本的年龄数据将维持原样而不会被自动替换掉。因此需要执行用新整型化的年龄值赋给原有年龄变量这一步骤。七、input() 自带提示功能print 可以省了前面的写法是先调用 print()函数以提示内容, 然后再调用 input()函数进行接收操作。事实上, input()函数自身是可以直接携带提示信息内容的:strongcode# 旧写法两行/code/strongprint(请输入你的年龄)age input()# 新写法一行搞定age input(请输入你的年龄)把提示文字直接放入输入函数括号内部, 产生的效果是完全一样的, 并且还可以少写一行代码, 这时候提示信息以及用户输入的内容都会出现在同一个行里面。建议在提示信息的末尾增加一个冒号符号, 这样显示的效果会更加规范一些, 例如在代码中写成 input(请输入你的年龄: )。八、在花括号里面, 是可以添加相关表达式的。在前面那段代码里面, 有这样一个形式的字符串, 就是那个用f开头并且后面跟着双引号的那种写法, 它里面的内容是“你明年的年龄是”再加上一个大括号, 大括号里面写的是age这个变量加上数字1, 这里面说的意思是, 大括号当中所能填入的东西, 不仅仅局限于一个变量的名字而已, 而是可以放入任何一种能够通过计算得出某一个具体数值的表达式类型的对象:这条规则只有一条, 那就是只要花括号里面的那些内容, 到最后能变成一个值出来, 那么这些内容就是可以被放到里面去的。九、这是一次完整的全流程实践操作, 目的就是为了拿到具体的姓名信息和个人的年龄数据。strongcodename input(请输入你的姓名)/code/strongage input(请输入你的年龄)age int(age)print(f姓名{name}年龄{age}明年{age 1}岁)运行效果strongcode请输入你的姓名李四/code/strong请输入你的年龄18姓名李四年龄18明年19岁先获取姓名, 再获取年龄。获取到的年龄数值通过类型转换操作, 转换成整数类型。这样转换后的结果, 既可以直接进行打印显示的操作。同时也能够用来参与加法运算。比如用它加上数字一。就能得出这个人明年的年龄数据是多少。十、总结知识点一句话记忆input() 功能与用于输出的 print() 函数相对, 该功能主要用来接收用户通过键盘输入的字符或数据。返回值类型它始终是字符串这一类型存在, 无论你向里面输入的是何种内容。为什么是字符串为了追求最大程度的兼容性, 我们选择将类型转换的权利完全交给程序员去处理。进行相关的计算工作。应当先将数值进行整型转换的操作处理完毕之后, 再着手去执行具体的计算步骤。提示信息把内容直接写到 input 的那个括号里面去, 这样一来, 就可以把 print 这个写法给省略掉了不用写。f, 也就是那个花括号。能放任何能算出值的表达式三句话浓缩1. 通过输入函数来获取用户所填写的具体内容, 然后必须使用一个指定的变量把那个返回的数据给接收住, 就这样用变量接住返回值这一种操作方式是可行的。2. 返回的结果始终都是字符串这种类型, 因此在执行任何关于数学的计算或者是运算之前, 必须先通过使用 int这个方法来进行转换。3. 提示信息应该直接放置到括号里的input ()中, 这样就是一行搞定的事情。请你务必牢记这样一个关键点, 那就是在你所输入的那个数字面前, 从 input()函数的视角来看, 它仅仅只是一段看起来像是数字符号的文本内容。如果你想要让它去充当一个真正数字的角色来参与后续运算或者处理的话, 那么你必须亲自动手去完成将其转换为指定类型的相关操作才行。
返回列表