2.1.1 数据的输入
Python中提供了input()函数用于输入数据,无论用户输入什么内容,该函数都返回字符串类型。其格式如下:
其中prompt表示提示信息,默认为空,如果不空,则显示提示信息。然后等待用户输入,输入完毕后按Enter键,并将用户输入作为一个字符串返回,自动忽略换行符。可以将返回结果赋予变量。
说明:函数参数最后一个斜线表示该函数斜线之前的参数只接收位置参数而不接收关键参数,但是在Python中并不允许自定义这样的函数。这样的函数一般是用C语言开发的内置函数或特定对象的方法。位置参数和关键参数相关知识请参考第6章内容。
当用户输入100,按Enter键之后,input()函数将字符串'100'赋予变量x,结果就是字符串'100'。内置函数type()返回对象的类型。
当用户输入like,按Enter键之后,input()函数将字符串'like'赋予变量x,结果就是字符串'like'。即不管输入什么内容,input()函数的返回结果都是字符串。
既然input()函数得到的结果就是字符串,那么要得到其他类型的数据怎么办?例如,怎么得到数值型数据?如何得到列表数据?这就要通过类型转换函数int()、float()等将字符串转换成数值。有些场合还可以用eval()函数计算字符串所表示的表达式的值。
为了说明这个问题,我们先来介绍一下函数int()、float()、eval()的功能和用法。
1. int()函数
格式1:int([x])
功能:截取数字的整数部分或将字符串转换成一个整数;如果不给定参数则返回0。
注意:int()函数不接受带小数的数字字符串。
格式2:int(x,base=10)
功能:把base进制的字符串x转换为十进制,base为可选的基数,默认为十进制。
说明:当int()函数的第一个参数为字符串时,可以指定第二个参数base来说明这个数字字符串是什么进制,同样不接受带小数的数字字符串。base的有效值范围为0和2~36。
实际上,int('4')即int('4',10),int('-4')即int('-4',10),默认为十进制。
2. float()函数
格式:float(x=0,/)
功能:将一个数字或字符串转换成浮点数。
3. eval()函数
格式:eval(source,globals=None,locals=None,/)
功能:将source当作一个python表达式进行解析和计算,返回计算结果。
参数说明:source是一个字符串,这个字符串能表示成Python表达式,或者是能够通过编译的代码;globals是可选的参数,默认为None,如果设置属性不为None的话,就必须是dictionary对象;locals也是可选的参数,默认为None,如果设置属性不为None的话,可以是任何map对象。
可以看出,eval()函数接收一个字符串参数时,如果字符串中是表达式可以返回表达式的值;如果字符串中是列表、元组或字典还能得到真正的列表、元组或字典;如果字符串中是能够通过编译的代码,则可以执行代码。
了解了int()、float()、eval()函数以后,我们继续讨论如何获得数值型数据或其他类型数据。
x的值为整数100,此时通过input()函数得到的字符串'100'被int()函数转换成整数100。
x的值为浮点数100.0。此时通过input()函数得到的字符串'100'被float()函数转换成浮点数100.0。
x的值为浮点数100.23,此时通过input()函数得到的字符串'100.23'被float()函数转换成浮点数100.23。
但是需要注意的是:期望得到整数的时候,利用int()函数不能输入带小数点的值,请参看前面int()函数的说明。如以下输入则会出错:
也可以通过eval()函数获得数值。
还可以通过eval()函数获得其他类型的值。
input()函数也可以同时为多个变量赋值。例如:
当用户输入ab,按Enter键之后,input()函数分别将'a'、'b'赋予变量x、y,结果就是x的值为'a',y的值为'b'。
但是,如果想得到x的值'ab',y的值'cd',我们直接输入abcd或者ab cd等均是错误的。
实际上我们并不会这样做。一般来说,我们会结合split()和map()函数得到多变量的值。因为split()和map()函数比较复杂,这里仅作简单说明,函数的具体用法请参看相关章节和其他资料。具体示例请参看例2-3和例2-4,这里不再赘述。
m是通过input()函数得到的字符串,输入的是ab cd,那么m就得到字符串'ab cd'(注意ab和cd之间用空格分隔),然后通过字符串的split()方法得到元素为字符串的列表(['ab','cd']),再通过map()函数将str()函数作用于该列表,得到包含若干字符串的map对象,最后通过对map对象进行序列解包将'ab'和'cd'分别赋给x和y。