学径 LearnPath

编程语言基础 / Wiki

输入

从键盘把一行文字收进程序;收进来的是字符串,要参与算术必须先转换成相应类型。

它是什么

input 把程序从「只往外说」变成「还会听」。它暂停运行,等使用者打一行字并确认,然后把这行内容作为字符串交回来。方向和 print 相反:一个进,一个出。程序与世界之间必须有接口;键盘输入是其中最直接、也最不稳定的一层——每一次运行,人打进来的内容都可以不同。

python
name = input("观测者:")
print("记录人:", name)

括号里的提示语会先显示出来,提醒对方该打什么。提示只是显示,真正的内容是随后打进去的那一行。

名字从哪来

input 本义是「输入」。计算过程被看成一台机器:原料从一端进入,结果从另一端出来。早期计算机用打孔卡片把数据送进机器;后来有了交互式终端,input 这类函数就代表「从标准输入读一行」。名字强调方向,并不承诺读进来的已经是数字或已经通过检验。

它怎么工作

input 得到的永远是字符串,即使打的是 3 的字形。要拿来做算术,先转换成合适的 类型,例如 int(...) 或 float(...)。转换失败会引发 异常,因为 "三" 并不是合法的数字写法。读进来之后,值必须赋给 变量,后面才能用。只写 input(...) 而不接住,那一行文字读完就丢了。

空回车会得到空字符串 ""。程序若假定「一定有内容」,这里就是边界。对方不一定按期望的格式输入:空白、汉字、意外的字母都可能出现。好的程序会检查,或用 try 接住转换失败,而不是把一次幸运的输入当成模型已经成立。

生活里在哪里

问卷上的填空、自动售货机等待编号、实验前在本子上记下今天的温度再带进计算——都是「此时此地的人把数据送进来」。与已经写好的 文件 不同,现场输入每次都可以不同,也因此最容易把未转换的字符串送进算术。仪器自动采集并写入文件,往往比当场口报更适合批量处理;键盘输入适合少量、需要人当场给出的参数。

和相近概念的差别

input 从人来。文件从已经写好的材料来。人每次打的可能不同;文件里的数据可以反复读。print 给人看,不把值送回给后面的代码;input 把值送进程序,默认并不打印一份副本,除非再 print。

把「提示语」和「读到的内容」当成同一件事,是阅读这类程序时常见的错位:显示给使用者看的,并不是已经进入变量的那一行。

常见误会

误会 1:打了数字的字形,就可以直接做除法。

类型仍是字符串。先转换,再运算。见 数据类型。

误会 2:提示语就是已经读到的内容。

提示只是显示。真正的内容是使用者随后打进去的那一行。

误会 3:对方一定会按期望的格式输入。

空白、汉字、意外的字母都可能出现。边界要么写进 选择,要么用异常诚实报告。能运行的一次输入,不等于接口已经封闭。

想知道更多

  • 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
  • 书:布鲁克希尔《计算机科学概论》
  • 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》

未登录时不会保存学习进度