一:input()函数的输入机制

我们编写的大部分程序,都需要读取输入并对其进行处理,而基本的输入操作是从键盘键入数据。Python从键盘键入数据,大多使用其内置的input()函数。但是,不同于程序设计初学者常接触的C和C++,我们不需要在输入之时规定变量的类型。相反,我们可以非常便捷的使用a = input()对任何数据类型的变量a进行赋值,无论是int,float还是列表等等。但是这并不代表Python将程序员的判断数据类型工作完全省去了,如果这样想,那么在编程过程中很容易出现问题。我们知道,在对变量进行赋值时,Python会帮助判断存储数据的类型,不需要我们进行操作,但是input不是这样。
首先,我们需要弄明白我们赋值的变量在python内部到底是以什么形式存在的。下面我将展示一个程序片段

>>> x = input()
4.5
>>> type(x)
<class 'str'>
>>> y = input()
Do you love python?
>>> type(y)
<class 'str'>

那么我们可以看到,通过type()函数,我们看到无论我们输入的值是int,float还是sring,最后input()i函数返回的这个数据的类型均为string型。了解了这一点,将有利于我们更好的使用input()函数。因为在算术运算中,字符串是没法直接和int或float数据进行算术运算的,如果直接使用,那么必然带来TypeError报错。

>>> x = input()
abc
>>> x * 3
'abcabcabc'
>>> y = input()
123
>>> x + y
'abc123

输入的字符串可以通过运算符进行连接、复制等操作 。但是无法直接使用算术运算

 

1 >>> x = input()
 2 5
 3 >>> x + 5
 4 Traceback (most recent call last):
 5   File "<stdin>", line 1, in <module>
 6 TypeError: must be str, not int
 7 >>> x * 5
 8 '55555'
 9 >>> y = input()
10 6
11 >>> x * y
12 Traceback (most recent call last):
13   File "<stdin>", line 1, in <module>
14 TypeError: can't multiply sequence by non-int of type 'str'

使用时需要转换,方法有两种

1.指定类型转换

 

>>> y = int(input())
 10
 >>> type(y)
 <class 'int'>

2.自动转换

函数eval() 用来执行一个字符串表达式,并返回表达式的值

eval(expression,[ ],])

global 和 locals 分别相当于全局和局部变量,eval函数会优先在局部变量存储空间中检索

 

>>> y = eval(input())
4.5
>>> type(y)
<class 'float'>

 

3.切割转换(可以用此方法完成多次输入)

利用函数split()通过指定分隔符对字符串进行切片。

str.split(str="",=string.count(str))

str为分割符,包括空格、\n,\t 等 ,num是分割次数。

1):利用split()函数进行输入,同时,我们不仅可以利用split()函数一次性输入多个数,我们还可以设置分隔符,除了传统的空格形式,也可以用逗号“,”这种更符合语言习惯的方式分隔输入字符。其原理是因为input()输入了一个字符串,而split()函数能根据设定的分割点分割字符串并返回分割后的字符串列表,所以能实现一次性输入多个数据值。范例如下:

python输出数组指定元素 python输入一个数组 input_字符串

 

但是,这样输入的值仍是字符串型,我们在上面已经说过字符串无法直接参与运算,最好输入时进行类型转换,那么,按照我们第二点的方法转换多输入值可行吗?

python输出数组指定元素 python输入一个数组 input_字符串_02

可以看到,这样是不可以的,那么为什么上面单输入可以而多输入报错呢?原因我们其实已经说过了,split()函数返回的是一个列表,spring当然能被转换成int型,但是列表是没法被这样直接转换的,所以我们需要用另一个函数map()来实现多输入的强制类型转换。
map()函数接受两个接收两个参数,一个是函数,一个是序列,map()将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。我们将传入的函数设置为强制类型转换函数int,则split()函数返回的列表里的每一个值都将被强制转换类型,从而实现多输入的类型转换。范例如下:

 

python输出数组指定元素 python输入一个数组 input_字符串_03