🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### 2.6.1 数据的输入 有的程序处理的是静态数据,即在程序运行之前数据已准备好。这时我们可以预先将数据存储在变量之中,并且能够针对数据的特性来选用合适的处理命令。例如,已知 Lucy 在 2012 年是 7 岁,则可编写下面的程序来显示 Lucy 的出生年份信息: 【程序 2.1】eg2_1.py ``` name = "Lucy" age = 7 birthYear = 2012 - age ``` print name,"was born in",str(birthYear)+"." 程序中,预定的数据分别存储在变量 name 和 age 中,利用算术表达式 2012-age 求得出 生年份,利用 str 函数将年份转换成字符串类型,利用字符串合并运算+为输出信息添上句 点。运行此程序,无需用户参与即可直接得到下面的结果: ``` Lucy was born in 2005. ``` 而另一些程序要处理的数据则是在执行程序时由用户提供的。用户提供数据的方式有多 种,其中最简单的方式是在程序中使用输入语句,其他方式包括在启动程序时以命令行参数 的方式传递数据或在图形用户界面中利用输入构件来提供数据。在此我们讨论最简单的输入 语句方式。 Python 中提供了 input()函数用于输入数据,该函数通常的使用方式如下: ``` <变量名> = input(<提示字符串>) ``` 执行时首先在屏幕上显示提示字符串,然后等待用户输入(以回车键表示输入完毕),并将 用户输 入作为一个表达式进行解释、求值,最后将求值结果赋予变量。例如: ``` >>> x = input("请输入: ") 请输入: 123 >>> x 123 >>> x = input("请输入: ") 请输入: 1+2 >>> x 3 ``` 可见,当用户连续按下数字键 1、2、3、回车键之后,input 函数将 123 视为表达式进行求 值,结果即数值 123。而当用户按下数字键 1、加号键+、数字键 2、回车键之后,input 将 1+2 视为表达式进行求值,结果为数值 3。 当然,作为一个函数,input 也可以直接用在表达式中,其作用相当于一个值。例如: ``` >>> 3 + input("请输入:") 请输入:4 7 ``` input 不仅能接收数值类型的表达式,也能接收其他类型的表达式。例如: ``` >>> x = input("请输入: ") 请输入: "123" >>> x '123' >>> x = input("请输入: ") 请输入: "1"+"2" >>> x '12' >>> x = input("请输入: ") 请输入: True and False >>> x False ``` 可见,当用户连续按下引号键"、数字键 1、2、3、引号键"、回车键之后,input 将"123" 视为表达式进行求值,得到的结果即为字符串"123"。而当用户连续按下引号键"、数字键 1、引号键"、加号键+、引号键"、数字键 2、引号键"、回车键之后,input 将"1"+"2" 视为字符串运算表达式进行求值,得到结果"12"。第三个输入例子是布尔表达式,结果是 显然的。 下面我们将程序 2.1 改写成另一版本:由用户输入姓名和年龄,然后计算出生年份。 【程序 2.】eg2_2.py ``` name = input("Name: ") age = input("Age: ") birthYear = 2012 - age print name,"was born in",str(birthYear)+"." ``` 以下是程序 2.2 的一次执行示例: ``` >>> import eg2_2 Name: "Lucy" Age: 7 Lucy was born in 2005. ``` 从上面的例子可以看到,input 函数在输入数值型数据时很方便,但在接收字符串类 型的数据时有点麻烦,因为要为字符串数据加上引号。如果不加引号,input 会将输入的 字符串解释为变量名,以便构成合法的表达式。除非程序中定义过该变量,否则会导致“变 量未定义”的错误。例如: ``` >>> x = input("请输入:") 请输入:Lucy Traceback (most recent call last): File "<pyshell#18>", line 1, in <module> x=input("请输入:") File "<string>", line 1, in <module> NameError: name 'Lucy' is not defined >>> Lucy = 7 >>> x = input("请输入:") 请输入:Lucy >>> x 7 ``` 其实,Python 还提供了另一个输入函数 raw_input(),它用于字符串数据输入时更方 便。raw_input 函数通常的使用方式如下: &lt;变量名&gt; = raw_input(&lt;提示字符串&gt;) 执行时首先在屏幕上显示提示字符串,然后等待用户输入(以回车键表示输入完毕),用户 键入的所有内容视为一个普通的字符串而不是表达式,该字符串就是 raw_input 的返回 值,可以赋值给其他变量。例如: ``` >>> x = raw_input("请输入:") 请输入:hello world >>> x 'hello world' ``` 可见,raw_input 将用户键入的所有字符构成一个字符串并作为函数的返回值。因此,用raw_input 输入字符串时不需要加引号,比 input 略为方便些。 同样可以将 raw_input 函数直接用在某个表达式中,其作用相当于一个字符串。例如: ``` >>> 2 * raw_input("请输入:") 请输入:Hello 'HelloHello' ``` input 与 raw_input 的比较 根据上面的介绍可知,如果需要输入数值或数值表达式,最好用 input;如果需要输入字符串,最好使用 raw_input。但这不是绝对的,实际应用中经常也用 raw_input 输入数值数据,具体做法是:先作为字符串输入,然后通过类型转换函数(int、long、float)或 eval 函数来将字符串转换成数值。例如: ``` >>> x = int(raw_input("Please enter a number: ")) Please enter a number: 123 >>> x + 456 579 ``` 例中 raw_input 所接收的输入字符串被 int 函数转换成整数类型。这看起来比直接使用 input 来输入数值麻烦,但 raw_input 有个好处是能处理空输入的情况(即用户直接按 回车键),而使用 input 时空输入会导致错误。试比较: ``` >>> x = input("Press Enter: ") Press Enter: Traceback (most recent call last): File "&lt;pyshell#15&gt;", line 1, in &lt;module&gt; x = input("Press Enter: ") File "&lt;string&gt;", line 0 ^ SyntaxError: unexpected EOF while parsing >>> x = raw_input("Press Enter: ") Press Enter: >>> x '' ```